首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >javascript中instanceof的奇怪输出

javascript中instanceof的奇怪输出
EN

Stack Overflow用户
提问于 2015-05-27 03:36:40
回答 4查看 173关注 0票数 4

当我做下面的片段时

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var name = new String("NewDelhi");
var count = new Number(10);
console.log(name instanceof String); //false
console.log(count instanceof Number); //true

当我使用name作为变量时,它显示为false,而给它提供了其他变量,它显示为true

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var str = new String("NewDelhi");
var count = new Number(10);
console.log(str instanceof String); //true
console.log(count instanceof Number); //true

为什么会发生这种事。

EN

回答 4

Stack Overflow用户

发布于 2015-05-27 03:58:36

这是因为name不是变量,而是window对象中的一个属性。当您尝试创建一个名为name的全局变量时,将忽略该变量,并将使用现有属性。

属性的类型是字符串原语,而不是字符串对象。变量的类型是动态的,因此它可以包含字符串原语或字符串对象,但是属性具有特定的类型,只能保存字符串原语。

typeof name将返回"string",而不是"object"。因为它不是对象,所以它不是String类的实例。

票数 1
EN

Stack Overflow用户

发布于 2015-05-27 03:53:42

我只是写了一个小片段

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function test(){
    window.name = 'Hello World';
    alert(name);
}

如果您尝试它,您将看到它将输出"Hello“,因此您的问题是由变量范围引起的。

当您调用console.log(name instanceof String)时,实际上是在执行console.log(window.name instanceof String);

此外,window.name是原语字符串,而不是对象,因此要检查它是否为字符串,请尝试如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
alert(typeof name === "string" );

它将输出'true'

票数 0
EN

Stack Overflow用户

发布于 2015-05-27 04:20:38

前面的答案似乎并没有强调这是一个特例。这种行为不仅是因为全局window对象已经具有名称param,而且因为window.name (=等效于浏览器环境中的全局name )被视为特例,即。总是被扔进原始的绳子里。

在全局窗口对象上定义的其他属性没有这种行为,您可以尝试自己添加一个属性:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
window.xyz = "primitive";
window.xyz = new String("NewDelhi");
window.xyz;
> String {0: "N", 1: "e", 2: "w", 3: "D", 4: "e", 5: "l", 6: "h", 7: "i", length: 8, [[PrimitiveValue]]: "NewDelhi"}

之所以这样处理,是因为可以保留属性的原始语义:它是窗口的名称,除了原始字符串以外的任何内容都是没有意义的。

有关更多细节,请参见this discussion (甚至可能需要将此问题标记为副本)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30481323

复制
相关文章
JavaScript instanceof
instanceof是JavaScript中的一个运算符,用于检查对象是否是特定构造函数的实例。它的语法形式为object instanceof constructor,其中object是待检查的对象,constructor是构造函数。该运算符返回一个布尔值,如果对象是指定构造函数的实例,返回true,否则返回false。
堕落飞鸟
2023/05/17
2820
JavaScript手写instanceof
instanceof运算符用于判断构造函数的prototype属性是否存在在对象的原型链中的任何位置。
henu_Newxc03
2022/05/05
2360
奇怪的 Javascript
我的意思是,对于刚开始使用这种语言和他语言(例如 C++ 或 C#)的开发人员来说,javascript 可能会很奇怪。
疯狂的技术宅
2020/04/24
9620
奇怪的 Javascript
Jenkins 控制台输出中的奇怪字符
其实这个不是问题,这是因为在你的程序中可能使用了 ANSI escape code 这种输出。
HoneyMoose
2021/06/26
2.1K0
Jenkins 控制台输出中的奇怪字符
【说站】javascript instanceof的原型介绍
2、instanceof的原理是判断_proto__是否与prototype指向相同的引用。
很酷的站长
2022/11/23
2290
【说站】javascript instanceof的原型介绍
php中instanceof作用
class ExampleClass implements ExampleInterface
botkenni
2022/01/10
8700
JavaScript instanceof 运算符深入剖析
在 JavaScript 中,判断一个变量的类型尝尝会用 typeof 运算符,在使用 typeof 运算符时采用引用类型存储值会出现一个问题,无论引用的是什么类型的对象,它都返回 "object"。ECMAScript 引入了另一个 Java 运算符 instanceof 来解决这个问题。instanceof 运算符与 typeof 运算符相似,用于识别正在处理的对象的类型。与 typeof 方法不同的是,instanceof 方法要求开发者明确地确认对象为某特定类型。例如:
莫问今朝
2019/02/25
6240
开发中奇怪的问题
不修改代码前好好的,刚加了些代码运行就不可以了,然后注释重新编译还是不行。
Qt君
2019/12/16
1.5K0
java中instanceof用法
java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例。instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例。  用法: result = object instanceof class 参数: Result:布尔类型。 Object:必选项。任意对象表达式。 Class:必选项。任意已定义的对象类。 说明: 如果 object 是 class 的一个实例,则 instanceof 运算符返回 true。如果 object 不是指定类的一个实例,或者 object 是 null,则返回 false。
砖业洋__
2023/05/06
3120
java中instanceof用法
首先,java 中的instanceof是一个运算符,而且是二目运算符,即有两个操作数。该运算符是用来在运行时指出对象是否是特定类的一个实例。instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例。 用法: result = object instanceof class 参数: Result:布尔类型。 Object:必选项。任意对象表达式。 Class:必选项。任意已定义的对象类。 说明: 如果 object 是 class 的一个实例,则 instanceof 运算符返回 true。如果 object 不是指定类的一个实例,或者 object 是 null,则返回 false。
全栈程序员站长
2022/09/14
1.5K0
JavaScript 输出
如需从 JavaScript 访问某个 HTML 元素,您可以使用 document.getElementById(id) 方法。
陈不成i
2021/07/15
5020
js中的instanceof运算符
instanceof运算符用来判断一个构造函数的prototype属性所指向的对象是否存在另外一个要检测对象的原型链上
IT人一直在路上
2019/09/18
2.5K0
手写实现js中的instanceof
// 自己实现 instance,left 代表 instanceof 左值,right代表 instanceof 右值 function instance(left, right) { let proto = Object.getPrototypeOf(left); let prototype = right.prototype; while (true) { // 如果传入的 left 的原型不存在,则直接返回 false if (!proto)
蓓蕾心晴
2022/06/07
8570
听说你对 JavaScript 中的输出挺熟?
在 JavaScript 中,不像 Java 等语言,它没有任何打印或者输出方法的,通常使用如下 4 种方式来输出数据。
村雨遥
2022/03/14
4380
听说你对 JavaScript 中的输出挺熟?
JavaScript 生态系统非常奇怪
相比其他语言,我觉得 JavaScript 的生态系统太奇怪了,实际运行的代码已经不再是开发者编写的 JavaScript,而是各种编译工具最终生成的产物。
ConardLi
2023/08/23
2070
JavaScript 生态系统非常奇怪
iOS 中各种奇怪的崩溃
注意,本文所有崩溃的原因都是同一个 EXC_BAD_ACCESS (code=1, address=0x11f645b98) image-20210423232626879 第一个堆栈:字典扩容 im
酷酷的哀殿
2021/04/26
1.7K1
iOS  中各种奇怪的崩溃
NIO中那些奇怪的Buffer
妖魔鬼怪快快显形,今天F师兄帮助小师妹来斩妖除魔啦,什么BufferB,BufferL,BufferRB,BufferRL,BufferS,BufferU,BufferRS,BufferRU统统给你剖析个清清楚楚明明白白。
程序那些事
2020/07/07
9160
Shell中各种奇怪的变量
这些变量是随系统运行而变化的,灵活使这些变量可简化我们的操作和更好地控制bash shell的行为。
老高的技术博客
2022/12/27
5500
instanceof
更重要的一点是 instanceof 可以在继承关系中用来判断一个实例是否属于它的父类型。
用户6847974
2019/12/23
5950
点击加载更多

相似问题

Java InstanceOf输出

46

奇怪的Javascript输出

10

Javascript奇怪的输出

115

奇怪的javascript输出

30

Javascript !instanceof If语句

30
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文