Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript中未捕获的引用错误&;未定义_Javascript - Fatal编程技术网

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。