评估未定义的JS变量返回错误

时间:2018-12-11 04:58:49

标签: javascript

那么,今天的Javascript显然不允许这样做吗?

<script>
    if (fbq == null) { 
        fbq('track', 'ViewContent'); 
    }
</script>

控制台返回以下内容: uncaught reference error 以及在Web检查器中: more detail

我认为这是很标准的代码?当然可以吗?

忽略在第142行调用fbq时未定义的事实。它甚至没有到达那里。该错误发生在第141行。我尝试测试“ typeof fbq”等,并且始终返回未定义的错误。奇怪。

4 个答案:

答案 0 :(得分:4)

您可以轻松做到:

typeof fbq || fbq === null // undefined
  

与其他运算符不同,typeof运算符与未声明的变量一起使用时不会引发ReferenceError异常。

答案 1 :(得分:0)

我发誓我早些时候尝试过这个排列,它也抛出了相同的错误,但是现在不是吗?在过去的一个小时里,奇怪的事情在我的浏览器中进行着。非常令人沮丧,但这可行:

<script>
    if (!(typeof fbq || fbq === null)) { 
        fbq('track', 'ViewContent'); 
    }
</script>

只需将脚本更新为使用Sanjay的代码而不是我的代码即可(

)。

答案 2 :(得分:0)

尝试一下,

if (typeof(fbq) =='undefined' || fbq == null) { 
        fbq('track', 'ViewContent'); 
    }

如@sanjay typeof运算符所述,在未定义变量上使用时不会引发ReferenceError异常。

答案 3 :(得分:0)

从Mozilla:

  

null值使用文字:null编写。 null不是   全局对象的属性的标识符,例如undefined即可。   取而代之的是,null表示缺少标识,表示   变量指向无对象。在API中,通常会在   可以预期对象但没有对象相关的地方。

// foo does not exist. It is not defined and has never been initialized:
foo;
"ReferenceError: foo is not defined"

// foo is known to exist now but it has no type or value:
var foo = null; 
foo;
"null"

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/null

我相信这就是它的表现。如果您查看规格,它会显示:

  

7.2.12抽象平等比较

     

比较x == y,其中x和y是值,产生true或   假。这样的比较如下:

If x is null and y is undefined, return true.
If x is undefined and y is null, return true.
Return false.

http://www.ecma-international.org/ecma-262/6.0/#sec-abstract-equality-comparison

因此基本上,如果您尝试类似的操作:

undefined == null // this should return true.

但是您不能使用尚未定义的引用。我认为,查看变量是否已定义的一个很好的测试是执行以下操作。

typeof variable !== 'undefined'

随时询问您是否需要进一步的澄清:)