与obj != null;
我知道obj != null
将检测任何允许在其上具有属性的内容为null,而undefined是唯一不能拥有属性的两个值。
这与
有何不同 Object(obj) === obj;
答案 0 :(得分:7)
Object(obj) === obj
测试obj
是对象还是原语,对于字符串也是如此。
console.log(Object('foo') === 'foo'); // false
console.log(Object(true) === true); // false
console.log(Object(null) === null); // false
var obj = {};
console.log(Object(obj) === obj); // true
确定值是否可以 并记住 指定的属性非常有用。
尝试使用属性时null
和undefined
完全错误,这就是obj != null
仍然有用的原因no primitive values are able to hold onto properties。
var pri = 'foo';
pri.foo = 'bar'; // no error, but still...
console.log(pri.foo); // undefined
var box = Object(pri);
box.foo = 'bar';
console.log(box.foo); // 'bar'
参考:
当obj
为null
或undefined
时,Object(obj)
returns a new Object()
:
1)如果 value 是
null
,undefined
或未提供,则创建并返回一个新的Object对象,就像调用标准的内置Object构造函数一样使用相同的参数(15.2.2.1)。
并且,原始布尔值,字符串和数字通过ToObject()
被加入到它们的对象类型中,它们不等于它们的原始等价物:
2)返回ToObject(值)。
console.log(typeof 'foo' === 'string'); // true
console.log(typeof Object('foo') === 'object'); // true
console.log('foo' instanceof String); // false
console.log(Object('foo') instanceof String); // true
答案 1 :(得分:-2)
身份(===。!==)
这些运算符的行为与相等运算符完全相同,但不进行类型转换,并且类型必须相同才能被认为是相等的。
http://www.c-point.com/javascript_tutorial/jsgrpComparison.htm
Nice Stack溢出链接 Which equals operator (== vs ===) should be used in JavaScript comparisons?
希望有所帮助