我正在使用node.js,所以這可能是V8特有的。JavaScript中typeof和instanceof的區別
我一直注意到一些怪事用typeof和的instanceof之間的差異,但在這裏是一個真正的錯誤我:
var foo = 'foo';
console.log(typeof foo);
Output: "string"
console.log(foo instanceof String);
Output: false
這是怎麼回事呢?
我正在使用node.js,所以這可能是V8特有的。JavaScript中typeof和instanceof的區別
我一直注意到一些怪事用typeof和的instanceof之間的差異,但在這裏是一個真正的錯誤我:
var foo = 'foo';
console.log(typeof foo);
Output: "string"
console.log(foo instanceof String);
Output: false
這是怎麼回事呢?
typeof
是一種構造,它返回您傳遞它的任何原始類型。
instanceof
測試以查看右操作數是否出現在左側原型鏈的任何位置。
重要的是要注意字符串文字和字符串對象new String("abc")
之間存在巨大差異。在後一種情況下,typeof
將返回「對象」而不是「字符串」。
有字面上的字符串,並且有String
類。它們是分開的,但它們可以無縫地工作,即您仍然可以將String
方法應用於文字字符串,並且它的作用就好像文字字符串是String
對象實例。
如果你明確地創建一個String
實例,它是一個對象,而且它是String
類的一個實例:
var s = new String("asdf");
console.log(typeof s);
console.log(s instanceof String);
輸出:
object
true
在JavaScript中,我相信還有的有着天壤之別原始字符串類型和「對象」字符串類型。大多數時候它們是可以互換的,顯然不是爲了'instanceof'檢查的目的。 – millimoose 2013-02-12 18:53:20
看看這個:https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String#Distinction_between_string_primitives_and_String_objects – Waxen 2013-02-12 18:54:07
呸,應該尋找SO第一: 的http://計算器/ 11571923/instanceof-string-not-behaving-as-expected-in-google-apps-script/11572009#11572009 – Eric 2013-02-12 18:54:18