有什么区别......
if(myVar.constructor == String)
和
if(typeof myVar == "string")
答案 0 :(得分:1)
表达式myVar.constructor
只返回成员“constructor”的值。对于给定对象来说,拥有一个指向字符串(或其他任何东西)的构造函数是完全可能和合法的。例如
function Apple() {}
var x = new Apple();
x.constructor = String
if (x.constructor == String) {
// True
}
使用typeof
运算符会提供您正在寻找的信息
if (typeof myVar == 'string') {
// It's a string
}
答案 1 :(得分:1)
typeof
可能有点误导。 请注意以下行为: typeof
失败:
typeof "snub"
// "string" -- as expected
typeof new String("snub")
// "object" -- even if it's still the string you're after
.constructor
始终如一地产生预期结果:
"snub".constructor == String
// true -- as expected
new String("snub").constructor == String
// true -- as expected
JavaScript中的所有原始值都有一个对应的对象包装器。它是基元从哪里找到要继承的原型链。
JavaScript中的值可以用基本形式表示(特别是从它们各自的对象继承),或者直接以对象形式表示。你可能会将一些字符串转换为字符串实例 - 也许是一个库 - 而你甚至都不知道它。字符串对象和基元通常表现相同。 当然,除了typeof
之外。
直接以对象形式 - 即使内部值可能代表字符串,数字或其他内容 - typeof
也会以"object"
回复。 < / p>
.constructor
是一种更可靠的识别对象类型的方法,可直接用于原始值(与所有其余的继承功能一样)感谢名为Autoboxing的语言功能。