2015-03-31 119 views
2

我發現這個奇怪的問題,當我寫類似下面的Javascript代碼:Javascript,var name = 1,「typeof name」給出「string」?

var name = 1; 
alert(typeof name); // this will alert "string" 
var b = 1; 
alert(typeof b); // this will alert "number" 

我得到了「串」爲「的typeof名」,卻得到了「數」爲「typeof運算B」,但是,我覺得他們兩者都應該是「一把手」

而這個代碼將不會運行或者:因爲名字的類型是「字符串」

var name = 1; 
if (name === 1) { 
    alert("ok") 
} 

它不會發出警報了,!

我在Chrome和Safari上面測試了代碼,它們都給出了相同的結果,所以在這種情況下爲什麼「typeof name」是「string」?爲什麼變量名稱「name」如此特別?

+0

但它的作用像魅力(正確) - > http://jsfiddle.net/s2tnns49/1/ – 2015-03-31 03:53:23

+2

在瀏覽器中,[global'name'或'window.name'](https:// developer。 mozilla.org/en-US/docs/Web/API/Window/name)已被定義爲始終是一個字符串。 – 2015-03-31 03:53:41

+1

@ jQuery.PHP.Magento.com不是真的......見下面 – 2015-03-31 03:58:00

回答

6

它是瀏覽器,其中相同的名稱和狀態窗口對象的某些屬性,如果你指定的任何其他類型的值,則該對象的toString()方法值將只需要字符串值,的行爲被分配給它

var name = 1; 
console.log(typeof name); // this will alert "string" 

var status = 1; 
console.log(status, typeof status); //gives '1` and string 

var status = {}; 
console.log(status, typeof status);//gives value of status as [object Object] since that is the toString() implementation of object 

var b = 1; 
console.log(typeof b); // 

演示:Fiddle


,如果你使用局部變量...即變量函數此行爲是不適用

function test(){ 
    var name = 1; 
    console.log(typeof name); // this will alert "string" 

    var status = 1; 
    console.log(status, typeof status); //gives '1` and string 

    var status = {}; 
    console.log(status, typeof status);//gives value of status as [object Object] since that is the toString() implementation of object 

    var b = 1; 
    console.log(typeof b); // 

} 

test() 

演示:Fiddle

+0

ok,所以如果你使用name1而不是name,它會讓Number正確嗎? – 2015-03-31 04:03:46

+0

@ jQuery.PHP.Magento.com是的它確實 – 2015-03-31 04:04:25

+0

@ArunPJohny有趣的是,非常感謝你,我想知道除了「名稱」和「狀態」之外,還有其他變量有這樣的行爲嗎?或者是否有這些「內置和特殊」變量的官方/非官方文檔? – 2015-03-31 04:19:50

3

的原因是,有namewindow.namewindow命名爲下一個屬性,它已被定義爲一個字符串。

當您聲明一個沒有範圍的變量時,它的作用域爲window

查看更多about window.name

相關問題