[经典面试题]JS的typeof和instanceof区别

这篇具有很好参考价值的文章主要介绍了[经典面试题]JS的typeof和instanceof区别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、typeof

typeof 是一个一元操作符不是函数,所以不需要传递参数,使用方法非常简单:typeof A

对于基本类型

let s = "Nicholas";

let b = true;

let i = 22;

let u;

let sb = undefined;

console.log(typeof s); // string

console.log(typeof b); // boolean

console.log(typeof i); // number

console.log(typeof u); // undefined

console.log(typeof sb); // undefined

对于引用类型

let o = {}; let a = [];

console.log(typeof o); // object

console.log(typeof a); // object

对于NULL类型

let n = null;

console.log(typeof n); // object

 虽然typeof null为object,但这只是JavaScript 存在的一个悠久 Bug,不代表null就是引用数据类型,并且null本身也不是对象

对于函数类型

let nn = function() {}

console.log(typeof nn); // function

对于日期类型

let date0 = new Date()

console.log(typeof date0); // object

对于正则类型

 let r = /a-z/;

console.log(typeof r ); // object

对于包装类型 

let sss = new String('sss')

let nnn = new Number(123)

let bbb = new Boolean(true)

let fff = new Function ()

console.log(typeof sss) // object

console.log(typeof nnn) // object

console.log(typeof bbb) // object

console.log(typeof fff) // function

使用new操作符,除Function外的所有构造函数的类型都是object。 

[经典面试题]JS的typeof和instanceof区别,JavaScript,javascript,前端,开发语言

二、instanceof 

instance中文翻译为实例,instanceof就是判断该对象是谁的实例。与typeof不同,它返回布尔值。

instanceof是对象运算符

instanceof的判断就是根据原型链进行搜寻,在对象obj1的原型链上如果存在另一个对象obj2的原型属性,那么表达式(obj1 instanceof obj2)返回值为true;否则返回false。

所以:

let sss = 'sss'

let nnn = 123

let bbb = true

console.log(sss instanceof String) // false

console.log(nnn instanceof Number) // false

console.log(bbb instanceof Boolean) // false

 因为sss nnn bbb是原始值,而不是通过包装函数生成的实例。

let sss = new String('sss')

let nnn = new Number(123)

let bbb = new Boolean(true)
 

console.log(sss instanceof String) // true

console.log(nnn instanceof Number) // true

console.log(bbb instanceof Boolean) // true

 正则和函数也一样

let rrr = new RegExp(/a-z/)

var fff = new Function()

 文章来源地址https://www.toymoban.com/news/detail-697098.html

console.log(rrr instanceof RegExp) // true

console.log(fff instanceof Function) // true

如果是作用在自己定义的构造函数呢?

let Cat = function() {}
let benz = new Cat()
benz instanceof Cat // true 

benz是实例不是构造函数所以:

benz instanceof Object // true
benz instanceof Function //false

再来个构造函数:

let BigCat = function() {}

BigCat.prototype  = new Cat();

 let bigBenz = new BigCat()

bigBenz instanceof Car // true

再来个奇葩的

let obj = Object.create(benz); //Car {}

obj instanceof Object  //true

let obj = Object.create(null);

obj instanceof Object // false 

instanceof检测null和undefined :

null instanceof Object  // false

undefined instanceof Object // false

 

三、总结 区别

  1. typeof会返回一个变量的基本类型,instanceof返回的是一个布尔值
  2. typeof是一元运算符 instanceof是对象运算符
  3. typeof 更合适判断基本类型,对引用类型、构造函数的实例对象以及null无法判断出准确类型
    instanceof 用于判断实例对象是否是某一构造函数的实例化对象,从而判处该对象所属的类型。 这种方式是通过原型链查找。

到了这里,关于[经典面试题]JS的typeof和instanceof区别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【面试经典150题】移除元素·JavaScript版

    题目来源 给你一个数组 nums 和一个值 val ,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组 。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。 0 = nums

    2024年02月11日
    浏览(39)
  • JavaScript经典面试题之for循环click

    复制 该段代码期望实现效果如下:点击p标签,弹出该p标签位置序号。请问上述代码能否实现该需求,如果不能,应该如何实现? 答案显而易见,不能。点击每个p标签都会弹出5。 要解决此问题,首先要了解 闭包 的概念。 闭包 是JavaScript语言的一个难点,也是它的特色,很

    2024年02月09日
    浏览(60)
  • 前端经典面试题 | 吊打面试官系列 之 说说你对TypeScript 和 JavaScript的理解

    🖥️ 前端经典面试题 专栏:吊打面试官系列 之 说说你对TypeScript 和 JavaScript的理解 🧑‍💼 个人简介:一个不甘平庸的平凡人🍬 ✨ 个人主页:CoderHing的个人主页 🍀 格言: ☀️ 路漫漫其修远兮,吾将上下而求索☀️ 👉 你的一键三连是我更新的最大动力❤️ 目录 一、回答

    2024年01月17日
    浏览(48)
  • 面试题速记:JavaScript有哪些数据类型,它们的区别是?

    JavaScript有哪些数据类型,它们的区别? JavaScript共有八种数据类型,分别是 Undefined、Null、Boolean、Number、String、Object、Symbol、BigInt。 其中 Symbol 和 BigInt 是ES6 中新增的数据类型: ●Symbol 代表创建后独一无二且不可变的数据类型,它主要是为了解决可能出现的全局变量冲突的

    2024年02月09日
    浏览(42)
  • javaScript手写专题——实现instanceof/call/apply/bind/new的过程/继承方式

    目录 原型链相关 手写instanceof 实现一个_instance方法,判断对象obj是否是target的实例  测试  手写new的过程 实现一个myNew方法,接收一个构造函数以及构造函数的参数,返回构造函数创建的实例对象 测试myNew方法 手写类的继承 ES6:class+extends实现继承 组合继承:调用两次父类

    2024年04月14日
    浏览(92)
  • 面试题-TS(一):TypeScript是什么?它与JavaScript有什么区别?

    面试题-TS(一):TypeScript是什么?它与JavaScript有什么区别? TypeScript是一种编程语言,它是JavaScript的超集。它通过添加静态类型、类、接口和模块等功能来扩展JavaScript。 JavaScript是一种广泛应用于Web开发的脚本语言,它的灵活性和易用性使得它成为了开发者们的首选。然而,Jav

    2024年02月15日
    浏览(50)
  • Node.js和浏览器在JavaScript运行环境方面存在一些区别和联系

    Node.js和浏览器在JavaScript运行环境方面确实存在一些区别和联系。 首先,让我们理解一下Node.js和浏览器的运行环境。Node.js是一个基于Chrome的V8引擎的服务器端JavaScript运行环境,允许开发者在服务器端运行JavaScript代码,并且提供了一系列的内置模块,如fs模块用于文件系统操

    2024年03月14日
    浏览(50)
  • JavaScript经典教程(七)-- JavaScript基础 -- 函数、argument、匿名函数、函数深入、选项卡

    1、函数 (1)特性 1、每个函数都有自己的作用域。 2、如果执行该变量名,会返回自己,即返回函数本身。 3、正常调用,返回函数中的执行结果。 当函数中无执行内容时,返回默认return=undefind;(每个函数都有默认return=undefined) 当函数中有执行内容时,返回返回值。 4、re

    2024年02月02日
    浏览(50)
  • 经典俄罗斯方块代码(转javascript代码)

    在网上发现一篇60行javascript超经典俄罗斯方块代码,值得学习,转为Delphi如下,有详细注释,不再另讲解:

    2024年01月20日
    浏览(40)
  • JavaScript 制作实时电子时钟 ,点赞加关注经典案例持续更新~

    效果动图,此动图时间仅为当时录制的时间,实际运行时间为实时时间 最主要是要通过 new Date()时间对象,获取各类实时时间,下面是一些常用的 Date对象的一些常用属性和方法: 获取: getFullYear() : 返回四位数的年份。 getMonth() : 返回月份,范围是0-11。 getDate() : 返回月份中

    2024年02月03日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包