javascript / typescript对象null检查

时间:2017-02-17 20:32:40

标签: javascript typescript

在以下两种方式进行空检查时,性能是否存在差异 -

if (!someObject) {
   // dosomething
}

vs

if (someObject != null) {
   // dosomething
}

3 个答案:

答案 0 :(得分:6)

!someObject检查所有虚假值。

Not ( empty string, undefined, null, 0, false) - will all pass the condition

其中第一个条件只检查null。

 if (someObject !== null) {
    console.log('falsey');
 }

 someObject = null;      // no message in console
 someObject = '';        // falsey
 someObject = undefined; // falsey
 someObject = 0;         // falsey
 someObject = false;     // falsey

错误检查

if (!someObject) {
    console.log('falsey');
 }

 someObject = null;      // no message in console
 someObject = '';        // no message in console
 someObject = undefined; // no message in console
 someObject = 0;         // no message in console
 someObject = false;     // no message in console

答案 1 :(得分:0)

@Sushanth - 你不是100%正确,

!变量检查' false'但确实请阅读https://developer.mozilla.org/pl/docs/Web/JavaScript/Referencje/Obiekty/null

!null // true

所以,如果

!null // true
//then 
null // false 

请做一个简单的测试:

var a_null = null; //false
var b_null = !null //true 

console.log(typeof(a_null)); //object, 'null' is an object.
console.log(typeof(b_null)); //boolean, now it is not an object.

if (a_null) var test_a = 1; // 'a_null' is false, so 'test_a' is 'Undefined'.
if (!a_null) var test_b = 2; // '!a_null' is true, so 'test_b = 2'.

if (b_null) var test_c = 3; // 'b_null' is true, so 'test_c = 3'.
if (!b_null) var test_d = 4; // '!b_null' is false, so 'test_d' is 'Undefined'.

console.log('TEST_A =',test_a,', TEST_B =',test_b,', TEST_C=',test_c,', TEST_D=',test_d); //TEST_A = Undefined, TEST_B = 2, TEST_C = 3 TEST_D = Undefined

祝福。

答案 2 :(得分:0)

要正确检查是否为空,您必须编写:

  if(!someobject && typeof someobject!== "object") 

理想情况下,typeof null不应返回“对象”

You Don't Know JS中的“类型和语法”一章提到:

这个JS中的原始错误已经存在了将近二十年,并且可能永远不会得到修复,因为现有的Web内容依赖于其错误行为,因此“修复”该错误会创建更多的“错误”并破坏很多错误网络软件。