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,这是什么原因 是否有任何变量,如名称,如变量名称
发生错误答案 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);
另一种方法是使用typeof
或constructor
对其进行测试
对于以下情况,相同的示例将返回true
var simpleStr = 'This is a simple string';
simpleStr .constructor == String
对于你的例子,如果你这样做
var name = new String("green");
name .constructor == String
它将返回true