2016-04-19 28 views
-1

在JavaScript中,输入“undefined”应该有一个值“undefined”。但是,在下面的这个例子中,未声明的xxx的类型为“未定义”,但显然它没有任何价值。 JS没有任何区别,因为xxx中没有值会引发异常。为了保持一致性,JS应该在typeof xxx上引发异常。否则,我们在这里有一个很大的逻辑漏洞。undefined类型的数据没有值?

<!DOCTYPE html> 
<html> 
<body> 

<script> 
document.write("Type=" + typeof xxx); 
document.write(", Value="); 
document.write(xxx); 
</script> 

</body> 
</html> 
+1

你的问题没有道理; 'undefined'不是“类型”。 – Pointy

+3

http://www.ecma-international.org/ecma-262/6.0/index.html#sec-typeof-operator - 根据规范,如果变量无法解析,则返回undefined,而不是错误,但如果你想获取变量的值,并且它是无法解析的,那么会抛出'ReferenceError' - 所以这里没有问题 –

+0

好吧,它是低级语言语义上的“类型”,但它不是实际JavaScript编程类型意义上的“类型”。无论如何,[11.4.3](http://www.ecma-international.org/ecma-262/5.1/#sec-11.4.3)就是这个问题的答案。当操作数无法解析时,'typeof'运算符显式返回'undefined'。 – Pointy

回答

0

您需要先了解一下:


在你的榜样,你从来没有真正宣布xxx作为一个变量,所以当你document.write(xxx)变量xxx不存在。

var xxx; 
document.write("Type=" + typeof xxx); 
document.write(", Value="); 
document.write(xxx); 

没有价值声明var xxx;将实例并因为它没有指定值,默认分配将undefined作为data types说明。

+0

这个问题不问为什么xxx是未定义的。问题是为什么undefined/undeclared xxx的类型为“undefined”,虽然规格说明不明确,但它没有值 4.3.10未定义的值 变量未被赋值时使用的原始值 4.3.11未定义类型 type的唯一值是未定义的值 –

+0

@JohnLopui'typeof'函数评估它为'undefined',这意味着它实际上是在运行'typeof'时声明/实例化它作为一个变量,但它不保存它那么当它完成它的垃圾收集并且已经消失时,所以当你在底部的document.write中调用它时,没有存在变量'xxx'的内存引用。 –

相关问题