typeof 与 instanceof 运算符

相信很多伙伴们在刚刚入门js的时候,都会遇到 typeof 与 instanceof 在用法上的一些个困惑,今天小编就要和大家聊一聊它们各自的用法以及一些区别,

您先别急,咱下面就来分别讲解:

js是一门弱语言,它在声明变量时无需确定变量的类型,js在运行时会自动判断。

typeof 

用来检测一个变量的类型,  返回值是一个字符串。

使用方式:typeof(表达式)和 typeof 变量名

运算符返回值:字符串,有七种可能:"undefined" ,"number" ,"string","boolean" ,"object" ,"function" ,"symbol"

typeof  undefined // "undefined"

typeof 1 // "number"

typeof "1" // "string"

typeof false // "boolean"

typeof {} // "object"

typeof [] // "object"

typeof null // "object"

typeof function () {} // "function"

typeof Symbol(1) // "symbol"

(注意:对象、数组、null的typeof返回值都是”object”)

如果我们想判断一个变量类型是否是数组,建议使用:Array.isArray([]) // true 来判断

instanceof

用来检测一个对象在其原型链中是否存在一个构造函数的 prototype 属性。

语法:[对象] instanceof [构造函数]

(注意:左侧必须是对象,如果不是,则直接返回 false)

let num = 1
num instanceof Number // false

num = new Number(1)
num instanceof Number // true

看到这里,有人可能要问,明明都是num 且都是1,为什么返回的结果却不同呢?

其实,第一个不是对象,而是基本类型,而第二个是封装成对象,所以为true。同理:

var a = new Array();
console.log(a instanceof Array); // true
console.log(a instanceof Object); // true   -----------因为 Array 是 Object 的子类

function test(){};
var a = new test();
console.log(a instanceof test) // true

此外,instanceof 可以在继承关系中用来判断一个实例是否属于它的父类型。如:

function Fn() {};
function Foo() {};
Foo.prototype = new Fn();
var foo = new Foo();
console.log(foo instanceof Foo); // true
console.log(foo instanceof Fn);  // true

Foo.prototype = {};
var foo2 = new Foo();
console.log(foo2 instanceof Foo); // true
console.log(foo instanceof Foo); // false  ---------Foo.prototype指向了一个空对象,这个空对象不在foo的原型链上。

原文地址:https://www.cnblogs.com/edwardwzw/p/11665834.html

时间: 2024-11-10 16:18:04

typeof 与 instanceof 运算符的相关文章

typeof和instanceof运算符

(1)typeof运算符用于判断某一个变量的数据类型,它可以作为函数来用,如typeof(a)可以返回变量a的数据类型:也可以作为一个运算符来使用,例如typeof a 也可以返回变量a的数据类型,不同类型参数使用typeof返回的类型如下: undefind值:undefined null值:object 布尔型值:boolean 数字型值:number 字符串值:string 对象:object 函数:function 案例: <!doctype html> <html lang=&

JavaScript中“typeof”运算符与“instanceof”运算符的差异

在JavaScript中,运算符“typeof”和“instanceof”都可以用来判断数据的类型,那么这两个运算符有什么不同之处呢? 差异一:使用方式不同. 最明显的差异就是这两个运算符的使用方式了.“typeof”是一元运算符,其后直接跟需要进行类型判断的数据:而“instanceof”是二元运算符,其左侧是需要判断的数据,右侧是用于比较的类型. //typeof是一元运算符: var amount = 108; console.log(typeof amout);//控制台输出“numbe

tips instanceof运算符和typeof运算符的区别

tips instanceof运算符和typeof运算符的区别  一.instanceof运算符:       此运算符可以判断一个变量是否是某个对象(类)的实例,返回值是布尔类型的(true和false).想要理解它的作用,必须对面向对象有所理解: 代码实例如下: var str=new String("foodoir"); var str2="foodoir"; console.log(str instanceof String); //true console

JavaScript中instanceof运算符的用法以及和typeof的区别

instanceof : 为判断一个对象是否为某一数据类型,或一个变量是否为一个对象的实例;返回boolean类型栗子①: <script type="text/javascript"> var aColors = ["red", "green", "blue"]; alert(typeof aColors[0]); //output "string" alert(aColors[0] inst

typeof 和instanceof

1.typeof 首先来看typeof的测试结果 1 //1.typeof 判定 非构造函数 数据类型 2 var a = '123'; //typeof a === string 3 var b = 123; //typeof b === number 4 var c = true; //typeof c === boolean 5 var d = function(){};//typeof d === function 6 var e = {}; //typeof e === object

浅谈JavaScript中typeof与instanceof的区别

  首先,我们从其常规定义入手:       instanceof 运算符可以用来判断某个构造函数的 prototype 属性是否存在另外一个要检测对象的原型链上.(需要注意的一点是:prototype(原型链)的属性值有可能会改变).     typeof操作符返回一个字符串,表示未经求值的操作数(unevaluated operand)的类型. 此处引入topeof的一些特别之处,以便在区分用instanceof 还是typeof是做出判断: 注意:在通过typeof处理"其他任何对象&qu

typeof和instanceof

typeof:  typeof是一个一元运算符,放在一个运算数之前. "boolean"---如果这个值是布尔值. "string"---如果这个值是字符串. "number"---如果这个值是数值. "undefined"---如果这个值未定义. "object"---如果这个值是对象(包括Number,String,Boolean这样的包装对象),数组或null. "function"

JavaScript原型链和instanceof运算符的暧昧关系

时间回到两个月前,简单地理了理原型链.prototype以及__proto__之间的乱七八糟的关系,同时也简单了解了下typeof和instanceof两个运算符,但是,anyway,试试以下两题: console.log(Function instanceof Function); console.log(String instanceof String); 如果无法得出准确答案,跟着楼主一起温故而知新吧. 温故 我们经常用typeof运算符来判断一个变量的类型,也确实挺好用,能判断出numb

JavaScript instanceof 运算符深入剖析

instanceof 运算符简介 在 JavaScript 中,判断一个变量的类型尝尝会用 typeof 运算符,在使用 typeof 运算符时采用引用类型存储值会出现一个问题,无论引用的是什么类型的对象,它都返回 "object".ECMAScript 引入了另一个 Java 运算符 instanceof 来解决这个问题.instanceof 运算符与 typeof 运算符相似,用于识别正在处理的对象的类型.与 typeof 方法不同的是,instanceof 方法要求开发者明确地确