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