myVar.constructor - 或 - typeof myVar ---有什么区别?

时间:2011-08-17 23:05:46

标签: javascript

有什么区别......

if(myVar.constructor == String)

if(typeof myVar == "string")

2 个答案:

答案 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可能有点误导。 请注意以下行为:

真正的String实例

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的语言功能。