如果函数未定义,为什么检查NOT typeof ==='undefined'会失败? 然而,在特定对象上检查NOT'undefined'是否安全?
这是我的例子:(这在我的代码中确实存在)
{{1}}
我可以为VERSION {N}添加一个额外的字母,它仍然会优雅地失败
BUT 如果我向Constructor {r}添加一个额外的字母,它将失败并且未定义“VERSION” 如果我在实际的函数名称下拉列表中添加一个额外的字母{n},则“未定义”“Contructor”。
(我正在测试添加一个额外的字母来合成不存在。 事实上,它告诉我链中的下一个对象......来自改变字母的那个是未定义的::似乎暗示它确实在检查链。)
我想检查的是是否正在使用特定的“VERSION”。 在某些情况下,将使用不同的“VERSION”。 在其他情况下,这个$ .function.dropdown将完全丢失。
但我的问题不是“如何做”。相反,它是“为什么会这样?” ::
如果未定义dropdown.constructor.VERSION,那么可以通过相同的检查来定义dropdownN.constructor.VERSION。
然而,似乎完全缺少该函数($ .fn.dropdown),整个部分将因未定义而失败
为什么使用这两种方式都不安全?看来typeof仅限于最终对象,而不是整个对象链?
答案 0 :(得分:0)
这可以回答你的问题:
“在ECMAScript 2015之前, typeof 总是保证为提供的任何操作数返回一个字符串。但是添加了非提升的,块范围的让和 const ,在声明它们之前在块中使用typeof和let变量会抛出一个ReferenceError 。这与未声明的形成对比变量,typeof将返回'undefined'。块作用域变量在块的开始处于“临时死区”,直到处理初始化,在此期间,如果访问它将引发错误。“
来源:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/typeof
答案 1 :(得分:0)
typeof
运算符无法防止无效使用值。尝试访问undefined
上的属性总是会引发错误。 E.g:
let foo = undefined;
foo.bar; // error
foo.bar.baz; // error
+foo.bar; // error
typeof foo.bar; // error
对undefined
上的任何内容进行访问均属错误,typeof
无法防范,+
运算符也无法防范它。