一、undefined并不是Null 在Javascript中,null是用于对象,undefined用于变量,属性和方法。 对象只有在定义了之后,才有可能变成null,否则就是undefined。如果我们想要测试一个对象是否存在的时候,在对象还没定义时使用下面的方式就会报错。
if(myObj !== null && typeof myObj !== "undefined")
改成这个样子就不会报错了:
if(typeof myObj !== "undefined" && myObj !== null)
二、为什么undefined,NaN和Infinity能赋值,而null不能赋值了吗?
因为undefined/NaN/Infinity是全局对象window的属性,所以可以被赋值。但是这些属性的内部属性是 [ [ writable ] ] 为 false,所以赋值无效。
Object.getOwnPropertyDescriptor(window, 'undefined');
// 结果:
// Object {value: undefined, writable: false, enumerable: false, configurable: false}null和true, false类似,是字面量,属于JavaScript的保留字。其实跟123, “football”是一类的,当然不能赋值。
三、数组中可以使用名字当索引
常见的js数组内部的索引都是数字形式的,数组的下标从0开始。
比如:
var person = {};
person.age = 22;
person.sayhi = function () {console.log('hi')};
person.age; //22
person['age']; //22
person.sayhi(); //hi
person['sayhi']; //hi
其中person['sayhi']这就是对象的写法,也说明了数组就是对象。这里的字符串索引跟平时的数字索引是不一样的。
当数组的索引变为字符串的时候,在使用数组的长度进行查询的时候,该数组的长度就为0。
本文深入解析了JavaScript中undefined与null的区别、undefined等特殊值为何可赋值而null不可、及数组使用名字作为索引的特点等内容。
1055

被折叠的 条评论
为什么被折叠?



