【问题标题】:JavaScript instanceof operator returning false [duplicate]JavaScript instanceof 运算符返回 false [重复]
【发布时间】:2017-02-13 05:17:30
【问题描述】:

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是什么原因 并且是否有任何变量,如 name 会像变量名一样引发错误

【问题讨论】:

  • window.name 在 JavaScript 中有特殊的含义。它不应该用作全局变量。
  • @JLRishe 它在“JavaScript 对象、属性和方法”下列出
  • @4castle 好点。

标签: javascript


【解决方案1】:

由于name是javascript中的保留keywrd(不是真正的保留而是全局对象),所以直接指向window.name

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

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

【讨论】:

    【解决方案2】:

    这是因为您试图覆盖 global name 变量,该变量有一个设置器,可以自动将您分配给它的任何内容转换为字符串(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();

    【讨论】:

      【解决方案3】:

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

      在第一种情况下,它检查原型链,发现它未定义并返回 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

      【讨论】:

      • 这个问题对OP对instanceof 操作符的理解没有问题。 OP 询问为什么它对两个都分配有new String('...') 的变量的行为不同。
      猜你喜欢
      • 2012-06-20
      • 1970-01-01
      • 1970-01-01
      • 2013-06-22
      • 2015-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多