JavaScript instanceof运算符返回false

时间:2017-02-13 05:17:30

标签: javascript

var name = new String("green");
    console.log(name instanceof String);//returns false
    var color= new String("green");
    console.log(color instanceof String);//returns true

这里第一个返回false而第二个返回true,如果我使用变量作为名称显示false,这是什么原因 是否有任何变量,如名称,如变量名称

发生错误

3 个答案:

答案 0 :(得分:2)

由于name在javascript中保留了keywrd(并非真正保留但是全局对象),因此它直接指向window.name

你可以尝试_name,它会起作用

var _name = new String("green");
console.log(_name instanceof String);//returns true

答案 1 :(得分:1)

这是因为您试图覆盖global name变量,该变量有一个setter,可以自动将分配给它的任何内容转换为字符串(new String创建一个String对象,与字符串不同。

解决方案:使用不同的变量名称或适当调整变量范围。



console.log(typeof name); // string

var name = new String("green");

console.log(typeof name); // still string

var color = new String("green");

console.log(typeof color); // object

// create new scope
function myFunction() {
  var name = new String("green");

  console.log(typeof name); // object

  var color = new String("green");

  console.log(typeof color); // object
}

myFunction();




答案 2 :(得分:0)

instanceof运算符测试对象在其原型链中是否具有构造函数的prototype属性。

在第一种情况下,它检查原型链,发现它未定义并返回false。这不仅适用于name,而且以下示例也将返回false

var simpleStr = 'This is a simple string'; 
console.log(simpleStr instanceof String);

另一种方法是使用typeofconstructor对其进行测试 对于以下情况,相同的示例将返回true

var simpleStr = 'This is a simple string'; 
simpleStr .constructor == String

对于你的例子,如果你这样做

var name = new String("green");
name .constructor == String

它将返回true

相关问题