当前位置: 首页 > 知识库问答 >
问题:

javascript - instanceof 为什么无法判断字面量?

拓拔辰钊
2023-07-16

MDN描述:
instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。
即检测构造函数的原型是否存在于参数的原型链上。
例如:

var o = new C()o instanceof C  // true

因为 Object.getPrototypeOf(o) === C.prototype //true
但是我使用字面量格式缺出现了问题

let a =123a instanceof Number   // falseObject.getPrototypeOf(a) === Number.prototype //true

能解释下为什么 a 不是一个 Number 构造函数的实例么?

共有2个答案

鲁俊友
2023-07-16
let a = new Number(123);console.log(a instanceof Number);  // true
韦睿
2023-07-16

let a =123 这里的 a 是基本类型,Number 是包装类型,比如 1.toString() 会将 1 转换为 new Number(1) 包装类型,然后调用这个对象 toString 的方法,这叫自动包装

另外 js 不像 java 一样,java 面试题基本都会提到 基本类型 和 对应的包装类型 的区别,js 基本不谈及这个

基本数据类型 没有 原型,instanceof 也不会触发自动包装,所以 a instanceof Number === false

Object.getPrototypeOf(1) 内部触发自动包装,1 会转换成 new Number(1) ,所以得到 Number.prototype

想要相等也很简单,触发它的自动包装就行

function test() {    "use strict";    return this}test.apply(123) instanceof Number === true
 类似资料:
  • 本文向大家介绍JavaScript判断数字是否为质数的方法汇总,包括了JavaScript判断数字是否为质数的方法汇总的使用技巧和注意事项,需要的朋友参考一下 前言 今天看到一个题目,让判断一个数字是否为质数.看上去好像不难.因此,我决定实现一下. DOM结构 如上所示,我们通过 isPrimeNum(num) 函数,来实现判断是否为质数.下面我们来实现这个函数. 通过FOR循环来判断是否为质数

  • 问题内容: 判断instanceof的结果并解释原因 [代码] 问题答案: 如果函数明确返回值,那么 运算符的结果将是这个值。 如果函数明确返回 non-primitive 值,那么 运算符的结果将是这个值。- 感谢 @xxf1996 指正 所以,原表达式相当于:。 运算符将检测右端值的 属性是否在左端值的原型链( 属性)上; 如果不在,则向上查找( 的 ,…),直到找遍左端值的整个原型链。 注:

  • 根据不同的值,判断应该用什么元素,大佬们有什么方法优化一下呀

  • 问题内容: “foo” instanceof String //=> false “foo” instanceof Object //=> false true instanceof Boolean //=> false true instanceof Object //=> false false instanceof Boolean //=> false false instanceof Ob

  • 本文向大家介绍JavaScript中的instanceof()和Array.isArray()方法有什么区别?,包括了JavaScript中的instanceof()和Array.isArray()方法有什么区别?的使用技巧和注意事项,需要的朋友参考一下 Array.isArray()方法是通用的,它可以在任何地方运行,而instanceof运算符不是通用的,它不能在新环境中工作。 语法1 语法2

  • 问题内容: 在JavaScript中的关键字可能会相当混乱首次遇到它的时候,人们往往会认为JavaScript是不是面向对象的编程语言。 它是什么? 它解决什么问题? 什么时候合适,什么时候不合适? 问题答案: 左侧(LHS)操作数是要测试到右侧(RHS)操作数的实际对象,右侧对象是类的实际构造函数。基本定义是: 这是直接从Mozilla开发人员网站获取的示例: 值得一提的是,如果对象继承自类的原