2016-04-19 26 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'的內存引用。 –

相關問題