网站建设模板价格,中山市区做网站公司,泰康人寿网站如何做计划领取,网站后台建设教程下载一、认识包装类型
1.原始类型的包装类
JavaScript的原始类型并非对象类型#xff0c;所以从理论上来说#xff0c;它们是没有办法获取属性或者调用方法的。
但是#xff0c;在开发中会看到#xff0c;我们会经常这样操作#xff1a;
var message hello world所以从理论上来说它们是没有办法获取属性或者调用方法的。
但是在开发中会看到我们会经常这样操作
var message hello world;
var words message.split( );
var length message.length;var num 2.5333;
num num.toFixed(2)那么为什么会出现这样奇怪的现象呢悖论
原始类型是简单的值默认并不能调用属性和方法这是因为JavaScript为了可以使其可以获取属性和调用方法对其封装了对应的包装类型
常见的包装类型有String、Number、Boolean、Symbol、BigInt类型
2.包装类型的使用过程
默认情况当我们调用一个原始类型的属性或者方法时会进行如下操作
根据原始值创建一个原始类型对应的包装类型对象调用对应的属性或者方法返回一个新的值创建的包装类对象被销毁通常JavaScript引擎会进行很多的优化它可以跳过创建包装类的过程在内部直接完成属性的获取或者方法的调用。
我们也可以自己来创建一个包装类的对象
name1是字面量literal的创建方式name2是new创建对象的方式
var name1 code!mq;
var name2 new String(code!mq);
console.log(typeof name1);// string
console.log(typeof name2);// object
console.log(name1 name2);// false注意事项null、undefined没有任何的方法也没有对应的“对象包装类” 二、数字类型Number
1.Number类的补充
前面我们已经学习了Number类型它有一个对应的数字包装类型Number我们来对它的方法做一些补充。
Number属性补充
Number.MAX_SAFE_INTEGERJavaScript 中最大的安全整数 (2^53 - 1)Number.MIN_SAFE_INTEGERJavaScript 中最小的安全整数 -(2^53 - 1)
Number实例方法补充
方法一toString(base)将数字转成字符串并且按照base进制进行转化 base 的范围可以从 2 到 36默认情况下是 10注意如果是直接对一个数字操作需要使用…运算符
// 对象的方法
// toString(base)
var num 1000
console.log(num.toString(), typeof num.toString())
console.log(num.toString(2))
console.log(num.toString(8))
console.log(num.toString(16))// console.log(123..toString(2))方法二toFixed(digits)格式化一个数字保留digits位的小数 digits的范围是0到20包含之间
// toFixed的使用(重要)
var pi 3.1415926
console.log(pi.toFixed(3))Number类方法补充
方法一Number.parseInt(string[, radix])将字符串解析成整数也有对应的全局方法parseInt方法二Number.parseFloat(string)将字符串解析成浮点数也有对应的全局方法parseFloat
更多Number的知识可以查看MDN文档
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Number
// 类的方法
// parseInt
// parseFloat
// 整数: 123
// 浮点数: 小数 123.321
var num1 123.521
console.log(Number(num1).toFixed(0))
console.log(Number.parseInt(num1))
console.log(Number.parseFloat(num1))// window对象上面
console.log(parseInt(num1))
console.log(parseFloat(num1))
console.log(parseInt Number.parseInt)// true三、数学对象Math
1.Math对象
在除了Number类可以对数字进行处理之外JavaScript还提供了一个Math对象。
Math是一个内置对象不是一个构造函数它拥有一些数学常数属性和数学函数方法
Math常见的属性
Math.PI圆周率约等于 3.14159
Math常见的方法
Math.floor向下舍入取整Math.ceil向上舍入取整Math.round四舍五入取整Math.random生成0~1的随机数包含0不包含1Math.pow(x, y)返回x的y次幂
//Math对象的属性
console.log(Math.PI)//Math对象的方法
var num 3.55
console.log(Math.floor(num)) // 3
console.log(Math.ceil(num)) // 4
console.log(Math.round(num)) // 4
// 另外方法
// random: 随机生成 [0, 1)
console.log(Math.random())
// 需求: [5~50)的随机数
// [a, b)
// y a
// x b - a
// Math.floor(Math.random() * x) y
// Math.pow(x, y)
console.log(Math.pow(2, 4))Math中还有很多其他数学相关的方法可以查看MDN文档
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Math
四、字符串类型String
1.String类的补充一基本使用
在开发中我们经常需要对字符串进行各种各样的操作String类提供给了我们对应的属性和方法。
String常见的属性
length获取字符串的长度
String也有很多常见的方法和操作我们来进行学习。
var a hello world;
a.length;//11操作一访问字符串的字符
使用方法一通过字符串的索引 str[0]使用方法二通过str.charAt(pos)方法它们的区别是索引的方式没有找到会返回undefined而charAt没有找到会返回空字符串
练习字符串的遍历
方式一普通for循环方式二for…of遍历
// for普通遍历
for (var i 0; i message.length; i) {console.log(message[i])
}// for..of的遍历 - 迭代器
// 目前可迭代对象: 字符串/数组
// 对象是不支持for..of
// String对象内部是将字符串变成了一个可迭代对象
for (var char of message) {console.log(char)
}2.String类的补充二 修改字符串
字符串的不可变性
字符串在定义后是不可以修改的所以下面的操作是没有任何意义的
var message hello world;
message[1] a;
console.log(message);//hello world所以在我们改变很多字符串的操作中都是生成了一个新的字符串
比如改变字符串大小的两个方法toLowerCase()将所有的字符转成小写toUpperCase() 将所有的字符转成大写
var message Hello World;
message[2] c;
console.log(message);
var upper message.toUpperCase();
console.log(upper);
var lower message.toLowerCase();
console.log(lower);3.String类的补充三 查找字符串
在开发中我们经常会在一个字符串中查找或者获取另外一个字符串String提供了如下方法
方法一查找字符串位置 str.indexOf(searchValue [, fromIndex])
从fromIndex开始查找searchValue的索引如果没有找到那么返回-1有一个相似的方法叫lastIndexOf从最后开始查找用的较少
var message Hello World;
var index message.indexOf(o);
console.log(index);
console.log(message.indexOf(o, 6));方法二是否包含字符串 str.includes(searchString[, position])
从position位置开始查找searchString 根据情况返回 true 或 false这是ES6新增的方法
console.log(message.includes(or));4.String类的补充四开头和结尾
方法三以xxx开头 str.startsWith(searchString[, position])
从position位置开始判断字符串是否以searchString开头这是ES6新增的方法下面的方法也一样
方法四以xxx结尾 str.endsWith(searchString[, length])
在length长度内判断字符串是否以searchString结尾
方法五替换字符串 str.replace(regexp|substr, newSubstr|function)
查找到对应的字符串并且使用新的字符串进行替代这里也可以传入一个正则表达式来查找也可以传入一个函数来替换
// 3.startsWith: 是否以xxx开头
// if (message.startsWith(my)) {
// console.log(message以my开头)
// }// 4.endsWith: 是否以xxx结束
// if (message.endsWith(why)) {
// console.log(message以why结尾)
// }// 5.replace 替换字符串
// var newMessage message.replace(why, kobe)
// console.log(message)
// console.log(newMessage)
var newName kobe
var newMessage message.replace(why, function() {return newName.toUpperCase()
})
console.log(newMessage)5.String类的补充五 - 获取子字符串
方法八获取子字符串 var s1 Hello World;
var s2 s1.slice(1, 5);
console.log(s1, s2);开发中推荐使用slice方法。
6.String类的补充六 - 其他方法
方法六拼接字符串 str.concat(str2, [, ...strN])
console.log(Hello.concat(World));方法七删除首位空格 str.trim()
console.log( coder!mq .trim());方法九字符串分割 str.split([separator[, limit]])
separator以什么字符串进行分割也可以是一个正则表达式limit限制返回片段的数量
var message my name is coder!mq;
console.log(message.split( , 3));// [my, name, is]更多的字符串的补充内容可以查看MDN的文档
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String
五、数组
1.认识数组
什么是数组Array呢
对象允许存储键值集合但是在某些情况下使用键值对来访问并不方便比如说一系列的商品、用户、英雄包括HTML元素我们如何将它们存储在一起呢这个时候我们需要一种有序的集合里面的元素是按照某一个顺序来排列的这个有序的集合我们可以通过索引来获取到它这个结构就是数组Array
数组和对象都是一种保存多个数据的数据结构在后续的数据结构中我们还会学习其他结构
我们可以通过[]来创建一个数组
数组是一种特殊的对象类型
var letters [a, b, c];2.数组的创建方式
创建一个数组有两种语法
// 方式一
var arr1 [];
// 方式二
var arr2 new Array();下面的方法是在创建一个数组时设置数组的长度很少用
var arr3 new Array(5);
console.log(arr3);数组元素从 0 开始编号索引index。
一些编程语言允许我们使用负数索引来实现这一点例如 fruits[-1]JavaScript并不支持这种写法
我们先来学习一下数组的基本操作
访问数组中的元素修改数组中的元素增加数组中的元素删除数组中的元素
3.数组的基本操作
访问数组中的元素
通过中括号[]访问arr.at(i) 如果 i 0则与 arr[i] 完全相同。对于 i 为负数的情况它则从数组的尾部向前数。
var arr [2,5,3,1];
arr[0];
arr.at(-1);修改数组中的元素
arr[0] coder!mq;删除和添加元素虽然也可以通过索引来直接操作但是开发中很少这样操作。
4.数组的添加、删除方法一
在数组的尾端添加或删除元素
push 在末端添加元素.pop 从末端取出一个元素.
arr.push(abc, edf);
arr.pop();在数组的首端添加或删除元素
shift 取出队列首端的一个元素整个数组元素向前移动unshift 在首端添加元素整个其他数组元素向后移动
push/pop 方法运行的比较快而 shift/unshift 比较慢。
5.数组的添加、删除方法二
如果我们希望在中间某个位置添加或者删除元素应该如何操作呢
arr.splice 方法可以说是处理数组的利器它可以做所有事情添加删除和替换元素。
arr.splice的语法结构如下
array.splice(start[, deleteCount[, item1[, item2[, ...]]]])
从start位置开始处理数组中的元素deleteCount要删除元素的个数如果为0或者负数表示不删除item1, item2, …在添加元素时需要添加的元素
var arr [3, 4, 5, 1];
// 删除2个元素
arr.splice(1, 2);
console.log(arr);//[3, 1]
var arr2 [5, 2, 1, 5, 6];
// 替换2个元素
arr2.splice(1, 2, 1, 2);
console.log(arr2);// [5, 1, 2, 5, 6]
// 新增2个元素
var arr3 [3, 5, 8, 0];
arr3.splice(2, 0, 1, 3);//[3, 5, 1, 3, 8, 0]
console.log(arr3);注意这个方法会修改原数组 6.length属性
length属性用于获取数组的长度
当我们修改数组的时候length 属性会自动更新。
length 属性的另一个有意思的点是它是可写的。
如果我们手动增加一个大于默认length的数值那么会增加数组的长度。但是如果我们减少它数组就会被截断。
var arr [2, 5, 1];
arr.length 1;
console.log(arr);//[2]所以清空数组最简单的方法就是arr.length 0;。
7.数组的遍历
普通for循环遍历
var arr [5, 6, 8, 2, 5];
for (var index 0; index arr.length; index) {console.log(arr[index]);
}for…in 遍历获取到索引值
for (var index in arr) {console.log(arr[index]);
}for…of 遍历获取到每一个元素
for (var value of arr) {console.log(value);
}8.数组方法 – slice、cancat、 join
arr.slice 方法用于对数组进行截取类似于字符串的slice方法。
arr.slice([begin[,end]])
包含begin元素但是不包含end元素
arr.slice(2, 3);arr.concat方法创建一个新数组其中包含来自于其他数组和其他项的值。
var new_array old_array.concat(value1[, value2[, ...[, valueN]]])
var newArr arr.concat([abc, edv], bdc);arr.join方法 将一个数组的所有元素连接成一个字符串并返回这个字符串。
arr.join([separator])
arr.join(-);9.数组方法 – 查找元素
arr.indexOf方法 查找某个元素的索引
arr.indexOf(searchElement[, fromIndex])
从fromIndex开始查找如果找到返回对应的索引没有找到返回-1也有对应的从最后位置开始查找的 lastIndexOf 方法
arr.includes方法判断数组是否包含某个元素
arr.includes(valueToFind[ fromIndex])
从索引 from 开始搜索 item如果找到则返回 true如果没找到则返回 false。
find 和 findIndex 直接查找元素或者元素的索引ES6之后新增的语法
var students [{ id: 100, name: why, age: 18 },{ id: 101, name: kobe, age: 30 },{ id: 102, name: james, age: 25 },{ id: 103, name: why, age: 22 }
]
var stu students.find(functon(value, index, arr) {if (value.age 18) return true;})10.数组的排序 – sort/reverse
sort方法也是一个高阶函数用于对数组进行排序并且生成一个排序后的新数组
arr.sort([compareFunction])
如果 compareFunction(a, b) 小于 0 那么 a 会被排列到 b 前面如果 compareFunction(a, b) 等于 0 a 和 b 的相对位置不变如果 compareFunction(a, b) 大于 0 b 会被排列到 a 前面也就是说谁小谁排在前面
var newStus students.sort(function(item1, item2) {return item2.age - item1.age;
})
console.log(newStus);等到后续讲解数据结构与算法时我们会编写自己的排序算法
冒泡排序、插入排序、选择排序、堆排序、希尔排序、快速排序等
reverse() 方法将数组中元素的位置颠倒并返回该数组。
11.数组的其他高阶方法
arr.forEach
遍历数组并且让数组中每一个元素都执行一次对应的方法
arr.map
map() 方法创建一个新数组这个新数组由原数组中的每个元素都调用一次提供的函数后的返回值组成
arr.filter filter() 方法创建一个新数组 新数组中只包含每个元素调用函数返回为true的元素
arr.reduce
用于计算数组中所有元素的总和对数组中的每个元素按序执行一个由您提供的 reducer 函数每一次运行 reducer 会将先前元素的计算结果作为参数传入最后将其结果汇总为单个返回值
// 1.forEach函数
var names [abc, cba, nba, mba]// 三种方式, 新增一种方式
names.forEach(function(item) {console.log(item, this)
}, { name: why })// 2.filter函数: 过滤
// var nums [11, 20, 55, 100, 88, 32]
// 2.1. for循环实现
// var newNums []
// for (var item of nums) {
// if (item % 2 0) {
// newNums.push(item)
// }
// }
// 2.2. filter实现
// var newNums nums.filter(function(item) {
// return item % 2 0
// })
// console.log(newNums)// 3.map函数: 映射
// var nums [11, 20, 55, 100, 88, 32]
// var newNums nums.map(function(item) {
// return item * item
// })
// console.log(newNums)// 4.reduce
// var nums [11, 20, 55, 100, 88, 32]
// var result 0
// for (var item of nums) {
// result item
// }
// console.log(result)
// 第一次执行: preValue-0 item-11
// 第二次执行: preValue-11 item-20
// 第三次执行: preValue-31 item-55
// 第四次执行: preValue-86 item-100
// 第五次执行: preValue-186 item-88
// 第六次执行: preValue-274 item-32
// 最后一次执行的时候 preValue item, 它会作为reduce的返回值// initialValue: 初始化值, 第一次执行的时候, 对应的preValue
// 如果initialValue没有传呢?
// var result nums.reduce(function(preValue, item) {
// console.log(preValue:${preValue} item:${item})
// return preValue item
// }, 0)
// console.log(result)// reduce练习
// var products [
// { name: 鼠标, price: 88, count: 3 },
// { name: 键盘, price: 200, count: 2 },
// { name: 耳机, price: 9.9, count: 10 },
// ]
// var totalPrice products.reduce(function(preValue, item) {
// return preValue item.price * item.count
// }, 0)
// console.log(totalPrice)// 综合练习:
var nums [11, 20, 55, 100, 88, 32]// 过滤所有的偶数, 映射所有偶数的平方, 并且计算他们的和
// var total nums.filter(function(item) {
// return item % 2 0
// }).map(function(item) {
// return item * item
// }).reduce(function(preValue, item) {
// return preValue item
// }, 0)
// console.log(total)// var total nums.filter(item item % 2 0)
// .map(item item * item)
// .reduce((preValue, item) preValue item, 0)
// console.log(total)六、Date类型
1.时间的表示方式
关于《时间》有很多话题可以讨论
比如物理学有《时间简史从大爆炸到黑洞》讲述的是关于宇宙的起源、命运比如文学上有《记念刘和珍君》时间永是流驶街市依旧太平比如音乐上有《时间都去哪儿了》时间都去哪儿了还没好好感受年轻就老了
我们先来了解一下时间表示的基本概念
最初人们是通过观察太阳的位置来决定时间的但是这种方式有一个最大的弊端就是不同区域位置大家使用的时间是不一致的。
相互之间没有办法通过一个统一的时间来沟通、交流。
之后人们开始制定的标准时间是英国伦敦的皇家格林威治 Greenwich 天文台的标准时间刚好在本初子午线经过的地方这个时 间也称之为GMTGreenwich Mean Time。
其他时区根据标准时间来确定自己的时间往东的时区GMThh:mm往西的时区GMThh:mm
但是根据公转有一定的误差也会造成GMT的时间会造成一定的误差于是就提出了根据原子钟计算的标准时间UTCCoordinated Universal Time
目前GMT依然在使用主要表示的是某个时区中的时间而UTC是标准的时间。
2.创建Date对象
在JavaScript中我们使用Date来表示和处理时间。
Date的构造函数有如下用法
new Date();
new Date(value);
new Date(dateString);
new Date(year, monthIndex[, day [ hours [, minutes [, seconds [,milliseconds]]]]);// 创建Date对象的方式
// 1.没有传入任何的参数, 获取到当前时间
var date1 new Date()
console.log(date1)// 2.传入参数: 时间字符串
var date2 new Date(2022-08-08)
console.log(date2)// 3.传入具体的年月日时分秒毫秒
var date3 new Date(2033, 10, 10, 09, 08, 07, 333)
console.log(date3)// 4.传入一个Unix时间戳
// 1s - 1000ms
var date4 new Date(10004343433)
console.log(date4)这个格式是什么意思呢
3.dateString时间的表示方式
日期的表示方式有两种RFC 2822 标准 或者 ISO 8601 标准。
默认打印的时间格式是RFC 2822标准的 我们也可以将其转化成ISO 8601标准的
YYYY年份0000 ~ 9999MM月份01 ~ 12DD日01 ~ 31T分隔日期和时间没有特殊含义可以省略HH小时00 ~ 24mm分钟00 ~ 59ss秒00 ~ 59.sss毫秒Z时区
console.log(date)
console.log(date.toDateString())
console.log(date.toISOString())4.Date获取信息的方法
我们可以从Date对象中获取各种详细的信息
getFullYear()获取年份4 位数getMonth()获取月份从 0 到 11getDate()获取当月的具体日期从 1 到 31方法名字有点迷getHours()获取小时getMinutes()获取分钟getSeconds()获取秒钟getMilliseconds()获取毫秒
获取某周中的星期几
getDay()获取一周中的第几天从 0星期日到 6星期六
5.Date设置信息的方法
Date也有对应的设置方法
setFullYear(year, [month], [date])setMonth(month, [date])setDate(date)setHours(hour, [min], [sec], [ms])setMinutes(min, [sec], [ms])setSeconds(sec, [ms])setMilliseconds(ms)setTime(milliseconds)
了解我们可以设置超范围的数值它会自动校准。
// 也可以给date设置时间(了解)
date.setFullYear(2033)
// 自动校验
date.setDate(32)
console.log(date)6.Date获取Unix时间戳
Unix 时间戳它是一个整数值表示自1970年1月1日00:00:00 UTC以来的毫秒数。
在JavaScript中我们有多种方法可以获取这个时间戳
方式一new Date().getTime()方式二new Date().valueOf()方式三new Date()方式四Date.now()
获取到Unix时间戳之后我们可以利用它来测试代码的性能
// 计算这个操作所花费的时间
var startTime Date.now()
for (var i 0; i 100000; i) {console.log(i)
}
var endTime Date.now()
console.log(执行100000次for循环的打印所消耗的时间:, endTime - startTime)// 封装一个简单函数
function testPerformance(fn) {var startTime Date.now()fn()var endTime Date.now()
}7.Date.parse方法
Date.parse(str) 方法可以从一个字符串中读取日期并且输出对应的Unix时间戳。
Date.parse(str)
作用等同于 new Date(dateString).getTime() 操作需要符合 RFC2822 或 ISO 8601 日期格式的字符串 比如YYYY-MM-DDTHH:mm:ss.sssZ 其他格式也许也支持但结果不能保证一定正常如果输入的格式不能被解析那么会返回NaN
var time1 Date.parse(2022-08-08T08:08:08.666Z);
console.log(time1);8.时间格式化的方法
详见【JavaScript高级】 文章转载自: http://www.morning.mdrnn.cn.gov.cn.mdrnn.cn http://www.morning.mrtdq.cn.gov.cn.mrtdq.cn http://www.morning.tsnmt.cn.gov.cn.tsnmt.cn http://www.morning.rgxcd.cn.gov.cn.rgxcd.cn http://www.morning.vehna.com.gov.cn.vehna.com http://www.morning.ypzsk.cn.gov.cn.ypzsk.cn http://www.morning.kjfqf.cn.gov.cn.kjfqf.cn http://www.morning.yrhsg.cn.gov.cn.yrhsg.cn http://www.morning.klzt.cn.gov.cn.klzt.cn http://www.morning.tmfhx.cn.gov.cn.tmfhx.cn http://www.morning.hmhdn.cn.gov.cn.hmhdn.cn http://www.morning.pzss.cn.gov.cn.pzss.cn http://www.morning.mnqg.cn.gov.cn.mnqg.cn http://www.morning.pkggl.cn.gov.cn.pkggl.cn http://www.morning.cznsq.cn.gov.cn.cznsq.cn http://www.morning.jnptt.cn.gov.cn.jnptt.cn http://www.morning.mwlxk.cn.gov.cn.mwlxk.cn http://www.morning.jbshh.cn.gov.cn.jbshh.cn http://www.morning.tlrxp.cn.gov.cn.tlrxp.cn http://www.morning.xmwdt.cn.gov.cn.xmwdt.cn http://www.morning.hous-e.com.gov.cn.hous-e.com http://www.morning.kdbcx.cn.gov.cn.kdbcx.cn http://www.morning.hwsgk.cn.gov.cn.hwsgk.cn http://www.morning.wpcfh.cn.gov.cn.wpcfh.cn http://www.morning.bzsqr.cn.gov.cn.bzsqr.cn http://www.morning.gsksm.cn.gov.cn.gsksm.cn http://www.morning.xlyt.cn.gov.cn.xlyt.cn http://www.morning.mjyrg.cn.gov.cn.mjyrg.cn http://www.morning.rcrnw.cn.gov.cn.rcrnw.cn http://www.morning.bjndc.com.gov.cn.bjndc.com http://www.morning.qyglt.cn.gov.cn.qyglt.cn http://www.morning.lpsjs.com.gov.cn.lpsjs.com http://www.morning.rxnl.cn.gov.cn.rxnl.cn http://www.morning.rdqzl.cn.gov.cn.rdqzl.cn http://www.morning.wjplr.cn.gov.cn.wjplr.cn http://www.morning.yxyyp.cn.gov.cn.yxyyp.cn http://www.morning.khdw.cn.gov.cn.khdw.cn http://www.morning.nfsrs.cn.gov.cn.nfsrs.cn http://www.morning.ktmbp.cn.gov.cn.ktmbp.cn http://www.morning.kjdxh.cn.gov.cn.kjdxh.cn http://www.morning.zrdhd.cn.gov.cn.zrdhd.cn http://www.morning.byzpl.cn.gov.cn.byzpl.cn http://www.morning.rknhd.cn.gov.cn.rknhd.cn http://www.morning.dxgt.cn.gov.cn.dxgt.cn http://www.morning.pndw.cn.gov.cn.pndw.cn http://www.morning.yskhj.cn.gov.cn.yskhj.cn http://www.morning.dblfl.cn.gov.cn.dblfl.cn http://www.morning.qpzjh.cn.gov.cn.qpzjh.cn http://www.morning.lwgrf.cn.gov.cn.lwgrf.cn http://www.morning.lsjtq.cn.gov.cn.lsjtq.cn http://www.morning.xhqr.cn.gov.cn.xhqr.cn http://www.morning.qcnk.cn.gov.cn.qcnk.cn http://www.morning.bwfsn.cn.gov.cn.bwfsn.cn http://www.morning.ykrkq.cn.gov.cn.ykrkq.cn http://www.morning.kjlhb.cn.gov.cn.kjlhb.cn http://www.morning.cbmqq.cn.gov.cn.cbmqq.cn http://www.morning.qrwdg.cn.gov.cn.qrwdg.cn http://www.morning.ctbr.cn.gov.cn.ctbr.cn http://www.morning.wdykx.cn.gov.cn.wdykx.cn http://www.morning.psxwc.cn.gov.cn.psxwc.cn http://www.morning.pwfwk.cn.gov.cn.pwfwk.cn http://www.morning.xnbd.cn.gov.cn.xnbd.cn http://www.morning.lzjxn.cn.gov.cn.lzjxn.cn http://www.morning.bcngs.cn.gov.cn.bcngs.cn http://www.morning.xwlmr.cn.gov.cn.xwlmr.cn http://www.morning.mxdhy.cn.gov.cn.mxdhy.cn http://www.morning.sfyqs.cn.gov.cn.sfyqs.cn http://www.morning.twwzk.cn.gov.cn.twwzk.cn http://www.morning.chmcq.cn.gov.cn.chmcq.cn http://www.morning.mmjyk.cn.gov.cn.mmjyk.cn http://www.morning.jzykq.cn.gov.cn.jzykq.cn http://www.morning.lbrwm.cn.gov.cn.lbrwm.cn http://www.morning.jbxd.cn.gov.cn.jbxd.cn http://www.morning.rbrhj.cn.gov.cn.rbrhj.cn http://www.morning.yqpzl.cn.gov.cn.yqpzl.cn http://www.morning.snmth.cn.gov.cn.snmth.cn http://www.morning.nbpqx.cn.gov.cn.nbpqx.cn http://www.morning.jgmdr.cn.gov.cn.jgmdr.cn http://www.morning.lgnrl.cn.gov.cn.lgnrl.cn http://www.morning.lmrcq.cn.gov.cn.lmrcq.cn