Javascript中未捕获的引用错误&;未定义
考虑:Javascript中未捕获的引用错误&;未定义,javascript,Javascript,考虑: var myString = new String("Hello world"); alert(myString.noSuchValue); // undefined alert(myshit); // This results in error, and not the above one 他们两个,即 对象myString上的属性noSuchValue 变量myshit 是未定义的 但是为什么对于myshit而不是对象属性案例,我会得到一个错误 考虑对您的代码稍作修改: v
var myString = new String("Hello world");
alert(myString.noSuchValue); // undefined
alert(myshit); // This results in error, and not the above one
他们两个,即
- 对象
上的属性myString
noSuchValue
- 变量
myshit
myshit
而不是对象属性案例,我会得到一个错误
考虑对您的代码稍作修改:
var myString = "Hello world";
var noSuchValue = myString.noSuchValue;
alert(noSuchValue);
在本例中,noSuchValue
是一个定义的变量,其值未定义
与此相比:
alert(otherValue);
这里,otherValue
是一个未定义的变量(即未使用var
声明的值),没有任何值
JavaScript可以处理值等于
未定义的变量,但当它看到未定义的变量时会抛出异常。这可能是因为您可以引用不存在的成员在现有对象上分配它,例如
var myObject = {firstMember: "test1"};
myObject.secondMember = "test2";
赋值左边的值是有意义的表达式是有意义的。您可以从中获得正确的答案,但我将在下面的示例中对其进行总结:
var data= myObj.prop1;
预期的行为是:
- 如果myObj(基本引用)不存在,则抛出ReferenceError
- 如果基存在,但属性不存在,则返回undefined
简单的答案是,语言就是这样定义的。对不存在的对象属性的引用不是错误。对未定义变量的引用是(通常)。@Pointy:如果是这样的话,那没关系。我同意无法解释的否决票对任何人都没有帮助。@Pointy如果是typeof
@torazaburo的操作数,那么“除非”部分就是其中之一;今天早上我还没有喝咖啡,所以我缺乏信心:)我不知道这是怎么回答这个问题的。因为引用一个不存在的对象成员是一个有效的表达式,但是引用一个不存在的变量并不是因为这些规范,+1。