在控制台上,当您输入
时 blahblah
然后按Enter键,您可以获得Unrecognized ReferenceError
。
但......
当您输入this.blahblah
时,会得到undefined
(表示没有错误)
为什么?
blahblah
何时在内存中为自己找到一个空间,以便为其分配特殊值(undefined
)? - 看起来,当我执行this.blahblah
时,它具有即时执行var blahblah;
的效果。
有任何意见吗?
答案 0 :(得分:6)
对于this.blahblah
,您指的是this
对象的属性(在您的情况下为window
)。
在JavaScript中,当您尝试获取对象的非现有属性时,它将返回undefined
类型。
然而,在第一种情况下,只调用blahblah
,您尝试使用名为blahblah
的引用调用对象。如果不存在,JavaScript将抛出ReferenceError
。
JavaScript有许多方法告诉你某些东西不存在。
答案 1 :(得分:1)
写入控制台
时也可以这样做obj
Uncaught ReferenceError: obj is not defined(…)
和
var obj = {a: 1}
obj.b
undefined
与this
- 您正在引用全局对象
答案 2 :(得分:0)
第一个是未声明的,第二个未定义。由于this
引用浏览器中的窗口,解释器会尝试查找它的属性blahblah
并失败,因此返回undefined
。
您可以通过尝试查找未定义变量的属性(例如bluh.blahblah
)来验证是否自动创建变量。您将再次收到未声明的错误,因为在任何范围内都找不到bluh
。
答案 3 :(得分:0)
访问不存在的对象的成员只会在阅读时返回undefined
,因为语言是"设计的"那样。
如果您为其指定了一个值,那么您就可以创建该成员。
当使用非本地标识符时,语言访问全局window
对象,但首先检查该成员是否实际存在,否则给出错误。这很奇怪,但只是接受它...就是这样,因为它是这样的。没有坚实的逻辑原因。
如果你认为这是值得怀疑的话,那就做好准备吧。逻辑不是Javascript语言的重要组成部分。你应该记住,Javascript在设计时并没有给出任何认真的想法(基本上它是在一夜之间创造出来的),作为一种语言,它几乎是可怕的。
然而,互联网大爆炸却在当前悲惨的状态下巩固了它,并且它不会被修复和#34;以不相容的方式改变它只会破坏整个万维网。通常"标准"经过大量的思考和实验后确定了这一点,但这并没有发生在Javascript和标准化的过程中,这是一夜之间的黑客行为。只需享受真正出色的运行时环境(HTML5浏览器,节点js),并在编写代码时付出很多关注。
PS:不要使用或查看有关==
在Javascript中所做的内容的规范。这只是胡说八道。