那么,今天的Javascript显然不允许这样做吗?
<script>
if (fbq == null) {
fbq('track', 'ViewContent');
}
</script>
我认为这是很标准的代码?当然可以吗?
忽略在第142行调用fbq时未定义的事实。它甚至没有到达那里。该错误发生在第141行。我尝试测试“ typeof fbq”等,并且始终返回未定义的错误。奇怪。
答案 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'
随时询问您是否需要进一步的澄清:)