标准库
Object
js 中所有对象都继承自 Object 对象,即 js 中所有对象都是 Object 的实例
函数与构造函数
Object() 在不使用 new 关键字的情况下就变成了一个普通函数,功能是将任意原始数据类型的转化为一个对应的包装对象,若是空参、null 和 undefined 会返回一个空对象
new Object() 使用时与函数功能和用法是一样的,只不过是语义不同,函数代表转化为一个对象,而构造函数代表新生成一个对象
静态方法
遍历属性
| 方法名 |
描述 |
Object.keys(obj) |
返回 obj 对象自身的所有属性名的数组(不包括不可枚举的属性) |
Object.getOwnPropertyNames(obj) |
返回 obj 对象自身的所有属性名的数组(包括不可枚举的属性) |
描述对象
注意
通过方法设置的描述对象,对于省略的元属性与直接设置属性方式不同的是 writable、enumerable 和 configurable 默认都是 false
| 方法名 |
描述 |
Object.getOwnPropertyDescriptor(obj,propertyName) |
获取 obj 的 propertyName 属性的描述对象,没有该属性返回 undefined |
Object.defineProperty(obj,propertyName,propertyDesc) |
通过描述对象,为 obj 对象定义某个属性 |
Object.defineProperties(obj,propertyDesc) |
通过描述对象,为 obj 对象定义多个属性 |
每个属性都有自己对应的属性描述对象,保存该属性的一些元信息,即元属性,控制属性的属性
| 属性名 |
描述 |
value |
属性值,默认 undefined |
writable |
布尔值,属性值是否可写,默认为 true;若设置为 false,则正常模式下写入默默失效,严格模式下会报错 |
enumerable |
布尔值,属性值是否可枚举,默认为 true; |
configurable |
布尔值,属性值是否可配置,默认为 true;若设置为 false 则无法删除该属性、也不得改变该属性的属性描述对象包括 configurable,value 属性除外,但是要注意的是:writable 只有在 false 改为 true 会报错,true 改为 false 是允许的 |
get |
取值函数,默认为 undefined |
set |
存值函数,默认为 undefined,必须有一个参数是 value |
一旦定义了存取器就必须保证 writable 为 true,在进行对属性值存取时就会调用存取器函数,无法绕过存取器,所以设置存取器后就不能同时在设置 writable 属性和 value 的默认值了,否则会报错
var obj = Object.defineProperty({}, "p", {
enumerable:true,
configurable:true,
get:function () {
return this.value
},
set: function (value) {
this.value = value
}
});
console.log(Object.getOwnPropertyDescriptor(obj,"p"));
var obj = {
set p(value){
this.value = value;
},
get p(){
return value;
},
}
console.log(Object.getOwnPropertyDescriptor(obj,"p"));
var obj = {
p:{
value:"100",
writable: true,
enumerable:true,
configurable:true,
}
}
console.log(Object.getOwnPropertyDescriptor(obj,"p"));
对象状态控制
| 方法名 |
描述 |
Object.preventExtensions(obj) |
防止 obj 对象扩展,无法添加新属性 |
Object.isExtensible(obj) |
判断 obj 对象是否可扩展 |
Object.seal(obj) |
禁止 obj 对象配置,无法添加新属性、无法删除旧属性,实质是把属性描述对象的 configurable 属性设为 false |
Object.isSealed(obj) |
判断一个 obj 对象是否可配置 |
Object.freeze(obj) |
冻结一个 obj 对象,无法添加新属性、无法删除旧属性、也无法修改属性的值 |
Object.isFrozen(obj) |
判断一个 obj 对象是否被冻结 |
原型链相关
| 方法名 |
描述 |
Object.create(obj) |
以 obj 为原型创建一个空对象并返回,省略参数或传入空对象父对象就是 Object,传入 null 则会返回不继承任何对象的空对象 |
Object.getPrototypeOf(obj) |
获取 obj 对象的 prototype 对象 |
Object.setPrototypeOf(obj,objPrototype) |
设置 obj 对象的 prototyoe 对象为 objPrototype 并返回 obj 对象 |
实例方法
| 方法名 |
描述 |
Object.prototype.valueOf() |
返回当前对象对应的值,默认情况下返回对象本身 |
Object.prototype.toString() |
返回当前对象的字符串形式,默认情况下返回类型字符串 |
Object.prototype.toLocaleString() |
返回当前对象的以本地字符串形式,主要用于 Date 类,默认情况下与 toString() 一样 |
Object.prototype.hasOwnProperty(propertyName) |
判断该对象是否有 propertyName 这个属性,不包含继承的 |
Object.prototype.isPrototypeOf(obj) |
判断该对象的原型是否是 obj |
Object.prototype.propertyIsEnumerable(propertyName) |
判断该对象的 propertyName 属性是否可枚举,对于没有该属性和对象原型中的属性一律返回 false |
Array
构造函数
返回一个新生的数组,若不使用 new 关键字也是一样的结果,但是建议总是加上 new 表示为使用构造函数创建对象
该构造函数的参数不一样时返回结果也是不一样的
| 参数 |
描述 |
| 无参或 0 |
返回空数组 |
| 一个正整数 |
正整数表示数组的长度,内容都是空位 |
| 一个非正整数(负数、小数) |
报错 |
| 一个其他数据类型 |
由此参数构成的单个元素的数组 |
| 多个参数 |
由此些参数构成数组元素的数组 |
静态方法
| 方法名 |
描述 |
Array.isArray(arr) |
判断 arr 是否是数组,弥补了 typeof 的不准确 |
实例方法
重写的
| 方法名 |
描述 |
Array.prototype.toString() |
重写了 Object 的方法,返回数组的字符串形式 |
Array.prototype.valueOf() |
重写了 Object 的方法,返回数组本身 |
会改变原数组的方法
| 方法名 |
描述 |
Array.prototype.push(...element) |
数组尾部添加一个或多个元素,并返回数组长度 |
Array.prototype.pop() |
数组尾部删除一个元素,并返回删除元素 |
Array.prototype.shift() |
数组头部删除一个元素,并返回删除元素 |
Array.prototype.unshift(...element) |
数组头部添加一个或多个元素,并返回数组长度 |
Array.prototype.reverse() |
将数组元素位置翻转 |
Array.prototype.splice(start,count[,...element]) |
从 start 位置开始删除 count 个元素后,插入 element 元素,并以数组形式返回删除的元素;可以只删除不插入;允许起始位置为负数代表倒数第几个; |
Array.prototype.sort([[compareFunction]]) |
对数组按照比较器函数进行排序,要注意的是:最好将比较器返回数值型,而不是布尔型;若不传入比较器函数则会按照字典顺序排序 |
不会改变原数组的方法
| 方法名 |
描述 |
Array.prototype.join(separator) |
返回以 separator 连接符连接数组元素的字符串,会将空位、undefined、null 的元素转化为空字符串 |
Array.prototype.concat(array) |
返回当前数组和 array 数组拼接的新数组 |
Array.prototype.slice([start,end]) |
返回 [start,end) 的子数组,可以是负数,表示倒数第几个,超过数组长度会转化为数组的长度;范围不合法会返回空数组;若 end 参数省略,则会从 start 位置开始,一直到到数组最后;若连 start 都省略了,则会从数组首部一直到数组的最后,即数组拷贝 |
Array.prototype.lastIndexOf(element) |
返回给定元素在位置,数组中倒着找第一次出现的位置,找不到返回-1 |
Array.prototype.indexOf(element) |
返回给定元素位置,在数组中正着找第一次出现的位置,找不到返回-1 |
函数式编程
- 对于所有的函数式方法都是同步的回调函数,也就是说这些回调函数不会添加到异步队列中
- 对于
map()、forEach()、filter()、some() 和 every() 来说参数是一致的
callback(currentElement[,index,array]):表示元素处理回调函数,只有第一个参数是必须的
currentElement:当前正在处理的元素
index:当前正在处理的元素下标
array:被调用的数组
thisTar:表示函数内部若使用 this 是时可以通过此参数改变回调函数中的 this 指向,从而避免指向了全局对象
- 对于
reduce() 和 reduceRight 来说参数是一致的,只不过处理顺序是相反的
callback(accumulator,currentElement[,index ,array]):表示元素处理回调函数,只有前两个是必须的
accumultor:累计器,每次调用回调函数的返回值;第一次还没调用时还没有返回值,所以第一次可能是数组的第一个元素,当前值会从第二个元素开始;也可能是设置的初始值,当前值会从第一个元素开始
currentElement:当前正在处理的元素
index:当前正在处理的元素下标
array:被调用的数组
initValue:设置第一次调用回调函数时累计器的值,若省略该值则默认使用数组的第一个元素做累计器的值,并且当前值会是第二个元素
对于函数式编程函数返回值是数组的就可以采用链式编程了,对于以下的回调要求只是建议
| 方法名 |
描述 |
Array.prototype.map(callback[,thisTar]) |
返回每个元素经过回调函数处理的新数组;回调要求有返回值 |
Array.prototype.forEach(callback[,thisTar]) |
无返回值,每个元素都经过回调函数处理;回调要求无返回值 |
Array.prototype.filter(callback[,thisTar]) |
每个元素经过回调函数处理,对于回调函数处理后返回 true 的元素组成新数组并返回;回调要求返回布尔值 |
Array.prototype.some(callback[,thisTar]) |
每个元素经过回调函数处理,只要有一个元素经过回调函数处理后返回 true 整个函数返回 true,否则返回 false;回调要求返回布尔值 |
Array.prototype.every(callback[,thisTar]) |
每个元素经过回调函数处理,所有元素经过回调函数处理后返回 true 整个函数返回 true,否则返回 false;回调要求返回布尔值 |
Array.prototype.reduce(callback[,initValue]) |
从前往后的顺序对每个元素经过回调函数处理,返回最后一次调用回调函数的返回值;回调要求返回有返回值,并且回调中要处理累计器的值 |
Array.prototype.reduceRight(callback[,initValue]) |
从前往后的顺序对每个元素经过回调函数处理,返回最后一次调用回调函数的返回值;回调要求返回有返回值,并且回调中要处理累计器的值 |
包装对象
将原始数据类型放在与之对应包装对象中,使原始数据类型也成为合成数据类型,之后这些包装对象就可以调用包装对象中的方法了,当然也可以为包装对象的原型上添加自定义的属性
要区分new Number ()和Number ()方法,前者属于构造函数返回对应的包装对象,而后者是普通函数返回原始类型,其他那几个也是同理(除拉Object ())
构造方法
对于函数方式在数据类型之间的转换,这里是构造方法方式,对于原始类型变为包装对象有一下四种方式:
| 构造函数名 |
描述 |
Number () |
配合new关键字生成对应的包装对象 |
String () |
配合new关键字生成对应的包装对象 |
Boolean () |
配合new关键字生成对应的包装对象 |
Object () |
配合new关键字生成对应的包装对象 |
公有的实例方法
| 方法名 |
描述 |
valueOf () |
重写了 Object 中的方法,返回包装对象中的原始类型数据 |
toString () |
重写了 Object 中的方法,返回包装对象中原始数据类型转化的字符串;若是Number的实例则还可以指定进制数 |
自动装箱与手动拆装
实际上就是是原始类型到包装对象自动转换,包装对象到原始数据类型手动转化
对于自定义属性是可以在手动装箱的对象中添加的,但是无法在自动装箱的对象中添加,自动装箱的对象是只读的,或者说包装对象方法调用结束后,包装对象实例会自动销毁,下一次调用字符串的属性时,实际是调用一个新生成的对象,而不是上一次调用时生成的那个对象,所以取不到赋值在上一个对象的属性;所以最好的方式是将属性定义在包装对象构造方法的原型对象上
Console.Log (new String ("1"));
Console.Log (new String ("1"). ValueOf ());
Console.Log ("1");
Console.Log (new Number (1));
Console.Log (new Number (1). ValueOf ());
Console.Log (1);
Console.Log (new Boolean (true));
Console.Log (new Boolean (true). ValueOf ());
Console.Log (true);
Console.Log ("1". Length);
Console.Log (new String ("1"). Length);
Number. Prototype. Add 1 = function (){return this.ValueOf ()+1;};
console.Log ((1). Add 1 ());
Console.Log (new Number (1). Add 1 ());
Boolean. Prototype. Not = function (){return !This.ValueOf ()};
Console.Log (true.Not ());
Console.Log (new Boolean (true). Not ());
Var str = new String ("1");
Str. Add = function (){
Return this.ValueOf ()+this.ValueOf ();
};
Console.Log (str.Add ());
Var str = "1";
Str. Add = str. Add = function (){
Return this.ValueOf ()+this.ValueOf ();
};
Console.Log (str.Add ());
Number
静态属性
| 属性名 |
属性值 |
Number. POSITIVE_INFINITY和Number. NEGATIVE_INFINITY |
指向Infinity和-Infinity |
Number. NaN |
指向NaN |
Number. MIN_VALUE |
浮点数中最小的正数5 e-324 |
Number. MAX_SAFE_INTEGER |
能精确表示的最大整数为9007199254740991 |
Number. MIN_SAFE_INTEGER |
能精确表示的最小整数为-9007199254740991 |
实例方法
注意调用时小数点的二义性,可以使用括号将数字括起来,也可以使用方括号的形式
| 方法名 |
描述 |
Number.Prototype.ToFixed (num) |
将数值转化为指定位数的小数字符串(四舍五入不准确) |
Number.Prototype.ToExponential (num) |
将数值转化为指定位小数位的科学计数法形式 |
Number.Prototype.ToPrecision () |
将数值转为指定位数的有效数字(小数整数都算上,四舍五入不准确) |
Number.Prototype.ToLocaleString ([zone, options]) |
默认返回本地的数字的字符串形式,也可以根据时区和配置转化为当地的字符串形式 |
String
静态方法
| 方法名 |
描述 |
String.FromCharCode (... Unicode) |
将Unicode改成编码转化成字符串 |
实例方法
查询方法
| 方法名 |
描述 |
String. Prototype. Length |
返回字符串的长度 |
String.Prototype.CharAt (index) |
返回指定下标的字符 |
String.Prototype.CharCodeAt (index) |
返回指定下标的字符Unicode编码,若下标不合法返回NaN |
String.Prototype.IndexOf (substr) |
返回给定子串在位置,字符串中正着找第一次出现的位置,找不到返回-1 |
String.Prototype.LastIndexOf (substr) |
返回给定子串在位置,字符串中反着找第一次出现的位置,找不到返回-1 |
截取方法
| 方法名 |
描述 |
String.Prototype.Slice ([start, end]) |
返回[start,end)的子串,可以是负数,表示倒数第几个,超过字符串长度会转化为字符串的长度;范围不合法会返回空串;若end参数省略,则会从start位置开始,一直到到最后;若连start都省略了,则会从数组首部一直到字符串的最后,即字符串拷贝 |
String.Prototype.Substring ([start, end]) |
返回[start,end)的子串,若是负数自动转化为 0,超过字符串长度会转化为字符串的长度,范围不合法会交换起始结束位置;若end参数省略,则会从start位置开始,一直到到最后;若连start都省略了,则会从数组首部一直到字符串的最后,即字符串拷贝 |
String.Prototype.Substr ([start, count]) |
从start位置开始,取count个字符,start可以是负数,表示倒数第几个,count为负数会转化为 0;若count参数省略,则会从start位置开始,一直到到最后;若连start都省略了,则会从数组首部一直到字符串的最后,即字符串拷贝 |
转化方法
| 方法名 |
描述 |
String.Prototype.Trim () |
返回一个去除两端空白的字符串 |
String.Prototype.ToLowerCase () |
返回转小写后的字符串 |
String.Prototype.ToUpperCase () |
返回转大写后的字符串 |
String.Prototype.Concat (str) |
返回当前字符串与str的拼接,与+效果相同 |
分隔方法
| 方法名 |
描述 |
String.Prototype.Split (regex) |
根据给定规则分隔字符串 |
Boolean
没有自己的方法,但是要注意以下使用方式,对于包装对象会当成对象来处理,所以会转化为 true
If (Boolean (false)) {
Console.Log ('true');
}
If (new Boolean (false)) {
Console.Log ('true');
}
If (Boolean (null)) {
Console.Log ('true');
}
If (new Boolean (null)) {
Console.Log ('true');
}
正则表达式
- 正则属于特殊的字符串,主要用于表达字符串的结构
- 如同字符串一样,有自己的构造函数可以使用
new RegExp ()生成,也可以使用字面量形式/进行包裹
正则修饰符
字面量形式在/包裹后修饰,使用构造函数形式则是第二个参数是修饰符
| 符号 |
含义 |
g |
表示全局匹配模式 |
i |
忽略字母大小写模式 |
m |
多行模式,$和^会识别换行符 |
正则匹配规则
转义字符
在使用new RegExp ()构造函数时,由于正则表达式也是字符串,再匹配正则中已经占用的符号时要进行转移,通常要使用两个反斜线,因为两个反斜线转移成一个反斜线,然后这个被转义后的反斜线再将后面要转义的符号转义
在使用字面量时已使用/包裹区分字符串了,所以像换行符制表符之类的字符就无需转义了,直接使用即可
| 符号 |
构造函数方式 |
字面量方式 |
\\ |
\ |
\\ |
\t |
\\t |
\t |
\n |
\\n |
\n |
特殊符号
[]中除拉&&、-、^其他就失去意义,无需转义,其中的关系是或的关系
| 符号 |
描述 |
|
. |
任意一个字符,除拉\r\n |
|
^ |
以开头,在[]中是取反 |
|
$ |
以结尾 |
|
[] |
单个符号范围 |
|
&& |
只作用于[]中,关系与取交 |
|
- |
只作用于[]中,表取值范围 |
|
{} |
数量词量词范围 |
|
() |
提升优先级和分组 |
|
| ` |
` |
关系或 |
数量词符号
贪婪模式(默认):重复次数多个满足条件情况下,尽可能的多匹配
非贪婪模式(数量词后跟一个?):重复次数多个满足情况下,尽可能的少匹配
| 符号 |
描述 |
* |
闭包,零次或多次 |
+ |
正闭包,一次或多次 |
? |
占位,零次或一次 |
{n} |
重复 n 次 |
{n,} |
重复 n 次或更多次 |
{n, m} |
重复 n 到 m 次 |
简化表达式
| 预定义类 |
描述 |
\d |
[0-9] |
\D |
[^0-9] |
\w |
[0-9 a-zA-Z_] |
\W |
[^0-9 a-zA-Z_] |
\s |
匹配空格 (包括换行,制表空格)[\t\r\n\v\f] |
\S |
[^\t\r\n\v\f] |
实例属性
要注意的是,除拉lastIndex属性以外的其他实例属性是只读的
| 属性名 |
描述 |
RegExp. Prototype. IgnoreCase |
判断该正则是否设置了i修饰符 |
RegExp. Prototype. Global |
判断该正则是否设置了g修饰符 |
RegExp. Prototype. Multiline |
判断该正则是否设置了m修饰符 |
RegExp. Prototype. Flags |
返回所有修饰符,按照字母顺序排序igm |
RegExp. Prototype. LastIndex |
返回下一次开始搜索的位置 |
RegExp. Prototype. Source |
返回正则的字符串形式 |
实例方法
| 方法名 |
描述 |
RegExp.Prototype.Test (str) |
测试str是否满足该正则;若是全局匹配模式下每次满足会修改lastIndex的值,下一次调用会从lastIndex位置开始进行匹配,也可以手动改lastIndex的值做到指定位置开始匹配,所以在全局匹配模式下就不要修改str变量了,因为会导致lastIndex值不准确 |
RegExp.Prototype.Exec (str) |
以数组形式返回str中满足该正则的字串,未有满足的返回null;若是分组正则(带有括号的正则)则会将每组匹配到的元素都放入数组,最外层未带括号的组号是 0,第一个带有括号的组号是 1,以此类推;返回的数组会比普通数组多两个属性:input表示原字符串、index表示匹配成功的原字符串下标位置,在全局匹配模式下会跟随lastIndex属性一起变化 |
字符串中的正则
| 方法名 |
描述 |
String.Prototype.Match (regexp) |
返回一个数组,成员是匹配到的子串,未有满足的返回null;要注意只有当正则是全局匹配模式下,成员才会是所有匹配的子串,否则会与正则的exec ()方法的非全局匹配模式下返回结果一样,并且此方法与正则的lastIndex无关 |
String.Prototype.Search (regexp) |
返回第一个满足正则规则的子串的位置。未有满足返回-1 |
String.Prototype.Replace (regexp, replacement) |
返回用replacement替换满足正则的子串;正则全局匹配模式下会替换掉全部满足正则的子串,而非全局匹配模式下只会替换第一个满足的正则的子串 |
String.Prototype.Split (regexp[, maxCount]) |
按照正则规则将字符串分隔成字符串数组,maxCount可以限制匹配到字符串的个数,也是数组元素个数,省略则代表全部分隔 |
Math
该对象只是个内置对象,既无法调用,也无法使用new关键字生成实例
静态属性
静态方法
| 方法名 |
描述 |
Math.Abs (number) |
绝对值 |
Math.Ceil (number) |
向上取整 |
Math.Floot (number) |
向上取整 |
Math.Round (number) |
四舍五入为整数 |
Math.Max (... Number) |
返回最大值 |
Math.Min (... Number) |
返回最小值 |
Math.Random () |
返回[0,1) 之间的随机数 |
Math.Sqrt (x) |
平方根,x,负数会返回NaN |
Math.Pow (x, y) |
幂运算,xy |
Date
函数
不管有没有参数,总是返回当前时间对象的字符串形式
构造函数
| 构造函数参数 |
描述 |
| 无参 |
返回当前时间的时间对象 |
| 单个整型数字 |
表示时间戳,返回当前时间戳的时间对象 |
| 字符串 |
能被解析的时间字符串,返回字符串描述的时间对象 |
| 多个整型数字 |
分别表示,年月日-时分秒, 毫秒,若只写一个年会当作时间戳处理,所以至少是两个参数;与其他编程语言一样,月份是从 0 开始的,日期是从 1 开始的,时间超过范围会自动折算,且允许为负数 |
静态方法
| 方法名 |
描述 |
Date.Now () |
返回当前时间的时间对象,是无参构造函数的一个工厂方法 |
Date.Parse (str) |
能被解析的时间字符串,返回字符串描述的时间对象,是字符串参数构造函数的一个工厂方法 |
Date.UTC (year, month[, date, hrs, min, sec, ms]) |
与构造函数的参数完全一致,只不过返回的是时间戳,该时间不再是当地时区了,而是世界标准时间 |
实例方法
to类:从Date对象返回一个字符串,表示指定的时间
| 方法名 |
描述 |
Date.Prototype.ToUTCString () |
返回UTC格式时间 |
Date.Prototype.ToISOString () |
返回ISO格式时间 |
Date.Prototype.ToJSON () |
返回符号 JSON 格式的时间,也就是ISO格式时间 |
Date.Prototype.ToString () |
返回完整的时间 |
Date.Prototype.ToDateString () |
返回日期 |
Date.Prototype.ToTimeString () |
返回时间 |
Date.Prototype.ToLocaleString () |
返回完整的本地时间 |
Date.Prototype.ToLocaleDateString () |
返回本地日期 |
Date.Prototype.ToLocaleTimeString ([zone, options]) |
默认返回本地时间,也可以根据时区和配置转化为当地的字符串形式 |
get类:获取Date对象的日期和时间
也有获取世界标准时间的方法,就是加一个UTC的前缀,如:getUTCDate ()
| 方法名 |
描述 |
Date.Prototype.GetTime () |
获取时间戳,与valueOf ()方法相同 |
Date.Prototype.GetFullYear () |
返回四位数年份 |
Date.Prototype.GetMonth () |
返回月,0 是 1 月,以此类推 |
Date.Prototype.GetDate () |
返回日,从 1 开始 |
Date.Prototype.GetHours () |
返回小时 |
Date.Prototype.GetMinutes () |
返回分钟 |
Date.Prototype.GetSeconds () |
返回秒 |
Date.Prototype.GetMilliseconds () |
返回毫秒 |
Date.Prototype.GetDay () |
返回星期,0 是星期日,以此类推 |
Date.Prototype.GetTimezoneOffset () |
返回当前时间与世界标准时间的时差 |
set类:设置Date对象的日期和时间
相应的也有设置世界标准时间的方法,也是加个UTC前缀,如:setUTCDate ()
| 方法名 |
描述 |
Date.Prototype.SetTime (milliseconds) |
设置时间戳 |
Date.Prototype.SetFullYear (year[, month, date]) |
设置四位数年份 |
Date.Prototype.SetMonth (month[, date]) |
设置月 |
Date.Prototype.SetDate (date) |
设置日 |
Date.Prototype.SetHours (hour[, min, sec, ms]) |
设置小时 |
Date.Prototype.SetMinutes (min[, sec, ms]) |
设置分钟 |
Date.Prototype.SetSeconds (sec[, ms]) |
设置秒 |
Date.Prototype.SetMilliseconds () |
设置毫秒 |
JSON
JSON 格式
- 复合类型的值只能是:数组、普通对象;不能是:函数、正则、日期
- 原始类型值只能是:字符串、十进制数、布尔值和 null;不能是:
NaN、Infinity、-Infinity、undefined
- 字符串必须使用双引号,不能使用单引号
- 对象的键名必须使用双引号包裹
- 数组或对象的最后一个成员不能加逗号
静态方法
只有两个静态方法,用来处理 JSON 格式数据
| 方法名 |
描述 |
|
|
JSON.Stringify (JSONStr[, callback]) |
将JSONStr字符串转换成 js 对象 |
|
|
| `JSON.Parse (obj,[callback |
array, number |
string])` |
将 js 对象转化成 JSON 字符串;普通对象:如果属性值undefined、函数或该属性不可枚举,该属性会被忽略;正则对象:会被转化成空对象;数组:如果数组元素是undefined、函数,该元素会被转化成null;原始数据类型:会被转化成对于的字符串格式(只有字符串类型会附带有双引号) |
Var obj = {
Name: "zhangsan",
Age:18
};
Var arr = [1,2];
Console.Log (JSON.Stringify (obj,["name"]));
Console.Log (JSON.Stringify (arr,["0"]));
Function fun (key, value){
Console.Log ("["+ key +"]: " + value);
If (typeof value !== "object"){
Return value+value;
}
Return value;
}
Console.Log (JSON.Stringify (obj, fun));
Console.Log (JSON.Stringify (obj, null, 2));
Console.Log (JSON.Stringify (arr, null,"--"));
Var json = JSON.Stringify (obj);
Console.Log (JSON.Parse (json, fun));
ToJSON 方法
如果一个对象中有toJSON ()方法时,则在使用stringify ()方法会使用该方法的返回值做为参数,而不是这个对象了,多数情况下使用此方法返回正则和Date对象的字符串形式,若没有此方法会转成空对象;Date中自带了,而正则中没有自带,需要手动处理
Var obj = {
Name: "zhangsan",
Age: 18,
ToJSON: function () {
Return "toJSON";
}
};
Console.Log (JSON.Stringify (obj));
Var obj = {
Name: "zhangsan",
Age: 18,
ToJSON: "toJSON"
};
Console.Log (JSON.Stringify (obj));
Comments NOTHING