JavaScript 杂乱的小总结

  1. 基本类型只有String、number、boolean、null、undefined,还有一个Object。存在装箱类型,不过后台自动转换。
  2. 通过new创建对象时,如果没有参数,可以省略“()”。-- new也可以省略!!!变态啊
  3. 当访问对象中不存在的属性时,如obj.x,不会有任何影响;但是,如果这样赋值,那么会为原对象创建一个属性!!!
  4. 对于变量来说,除了全局作用域,就只有函数内部的作用域了。甚至for(var i = 0;..;..) 这里定义的i都是全局变量!!!
  5. 即便是在函数内部,使用var a=b=1;这样定义变量时,b默认是全局变量!!! -- 这里有个关键:默认没有定义就使用的变量为全局变量。
  6. ES6(还是5?),推出了use strict模式,没有定义的变量不能使用!该模式可以出现在文件的全局范围内(任何地方),也可以出现在方法内部!--当然,作用范围也不一样。
  7. 关于字符串转JSON,需要使用JSON.parse(str)。如果JSON转字符串,需要使用JSON.stringify(json)。
    • 需要注意的是,如果JSON中有值为undefined的属性,那该属性不会出现在结果字符串中!还有,NaN会转成null;new Date() 会转成日期!
    • 如果需要定制JSON转字符串的样式,添加一个toJSON属性即可,其值一般是方法。

例子:

 1 // 序列化 JSON
 2 
 3 var str = '{"name":"xiaoer", "age":18}'
 4 var json = { name: "xiaoer", age: 18}
 5 
 6 var json_str = JSON.stringify(json)
 7 console.log('我是JSON转成的字符串:' + json_str)
 8 
 9 var str_json = JSON.parse(str)
10 console.log('我是字符串解析成的JSON:' + str_json)
11 
12 console.log('*************************************************')
13 json.birthday = new Date()
14 json.sex = undefined
15 json.pic = null
16 json.soul = NaN
17 console.log(str)
18 json_str = JSON.stringify(json)//忽略undefined!!!
19 console.log('我是JSON转成的字符串:' + json_str)
20 
21 console.log('*************************************************')
22 var obj = {
23     x: 1,
24     y: 2,
25     o: {
26         o1: 1,
27         o2: 2,
28         toJSON: function () { // 自定义转JSON的格式
29             return this.o1 + this.o2
30         }
31     }
32 }
33 
34 var obj_str = JSON.stringify(obj)
35 console.log(obj_str)

关于数组:

稀疏数组(就是含有未初始化的元素的数组,例如下面第4行会导致一个稀疏数组),未初始化的元素的角标实际上是不存在的。虽然遍历数组会返回undefined,但实际上角标是不存在的!这和你将【arr[i] = undefined】的操作是不同的。

另外,【arg in arr】,这里的arg对应的是已初始化的元素的角标!!!

 1 var arr = []
 2 console.log(arr.length)
 3 
 4 arr[10] = 111; // 这样做会导致稀疏数组,就是某些角标压根没有初始化。
 5 console.log(arr.length)
 6 for (var i = 0; i < arr.length - 1 ; i++) {
 7     console.log('arr[' + i + '] = ' + arr[i]) 
 8 }
 9 
10 console.log('*****************')
11 arr[8] = undefined
12 var iter;
13 for(iter in arr){ // 这种for不会输出稀疏空缺值(不是undefined)!默认输出的是角标!
14     console.log('arr[' + iter + '] = ' + arr[iter])
15 }
16 
17 console.log('*****************')
18 console.log('(10 in arr)' + (10 in arr)) // arg in arr; 其结果是判断角标索引,而且仅判断非undefined的角标!!!
19 console.log('(9 in arr)' + (9 in arr)) 
20 arr[9] = undefined
21 console.log('(9 in arr)' + (9 in arr)) 
原文地址:https://www.cnblogs.com/larryzeal/p/6001878.html