Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
返回false的JavaScript instanceof运算符_Javascript - Fatal编程技术网

返回false的JavaScript instanceof运算符

返回false的JavaScript instanceof运算符,javascript,Javascript,var name=新字符串(“绿色”); log(名称instanceof String)//返回false var color=新字符串(“绿色”); log(字符串的颜色实例)//返回true,因为name是javascript中的保留键(不是真正的保留键,而是全局对象),所以它直接指向窗口。name 您可以尝试\u name,它会起作用 var _name = new String("green"); console.log(_name instanceof String);//retur

var name=新字符串(“绿色”);
log(名称instanceof String)//返回false
var color=新字符串(“绿色”);

log(字符串的颜色实例)//返回true
,因为
name
是javascript中的保留键(不是真正的保留键,而是全局对象),所以它直接指向
窗口。name

您可以尝试
\u name
,它会起作用

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

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

解决方案:使用不同的变量名或正确地定义变量的范围

console.log(名称类型);//一串
变量名称=新字符串(“绿色”);
console.log(名称类型);//静止弦
var color=新字符串(“绿色”);
console.log(颜色类型);//对象
//创建新范围
函数myFunction(){
变量名称=新字符串(“绿色”);
console.log(typeof name);//对象
var color=新字符串(“绿色”);
console.log(typeof color);//对象
}

myFunction()instanceof操作符测试对象的原型链中是否包含构造函数的原型属性

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

保留字的
窗口。名称在JavaScript中有特殊含义。它不应该用作全局变量。@JLRishe它列在“JavaScript对象、属性和方法”下@4castle Good point。这个问题与OP对
instanceof
运算符的理解无关。OP询问为什么它在两个变量上的行为不同,这两个变量都有
新字符串(“…”)