typeof instanceof区别

JavaScript 中 typeof 和 instanceof 常用来判断一个变量是否为空,或者是什么类型的。但它们之间还是有区别的## (http://www.cnblogs.com/Trr-984688199/p/6180040.html)
typeof 是一个一元运算,放在一个运算数之前,运算数可以是任意类型。

它返回值是一个字符串,该字符串说明运算数的类型。(typeof 运算符返回一个用来表示表达式的数据类型的字符串。 )

typeof其实就是判断参数是什么类型的实例,就一个参数

typeof 一般只能返回如下几个结果:“number”、“string”、“boolean”、“object”、“function” 和 “undefined”。

运算数为数字 typeof(x) = “number”

字符串 typeof(x) = “string”

布尔值 typeof(x) = “boolean”

对象,数组和null typeof(x) = “object”

函数 typeof(x) = “function”

console.log(typeof (123));//typeof(123)返回"number"
console.log(typeof (“123”));//typeof(“123”)返回"string"
var param1 = “string”;
var param2 = new Object();
var param3 = 10;
console.log(typeof(param1)+"\n"+typeof(param2)+"\n"+typeof(param3));
     // string object number

我们可以使用 typeof 来获取一个变量是否存在,如 if(typeof a!=“undefined”){alert(“ok”)},而不要去使用 if(a) 因为如果 a 不存在(未声明)则会出错,对于 Array,Null 等特殊对象使用 typeof 一律返回 object,这正是 typeof 的局限性。

经常会在js里用到数组,比如 多个名字相同的input, 若是动态生成的, 提交时就需要判断其是否是数组.

if(document.mylist.length != “undefined” ) {} //这个用法有误.

正确的是 if( typeof(document.mylist.length) != “undefined” ) {}

 或 if( !isNaN(document.mylist.length) ) {} 

typeof的运算数未定义,返回的就是 “undefined”.

在 JavaScript 中,判断一个变量的类型尝尝会用 typeof 运算符,在使用 typeof 运算符时采用引用类型存储值会出现一个问题,无论引用的是什么类型的对象,它都返回 “object”。这就需要用到instanceof来检测某个对象是不是另一个对象的实例。

instanceof

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

语法:object instanceof constructor
参数:object(要检测的对象.)constructor(某个构造函数)
描述:instanceof 运算符用来检测 constructor.prototype 是否存在于参数 object 的原型链上。

instance:实例,例子

a instanceof b?alert(“true”):alert(“false”); //a是b的实例?真:假

instanceof 用于判断一个变量是否某个对象的实例,

### JavaScript 中 `typeof` 和 `instanceof` 的区别与使用场景 #### 1. 基本定义与返回值 `typeof` 是一个运算符,用于检测变量的原始数据类型。它返回一个字符串,表示未经计算的操作数的类型[^2]。例如: ```javascript typeof 1; // 'number' typeof '1'; // 'string' typeof undefined; // 'undefined' typeof true; // 'boolean' typeof Symbol(); // 'symbol' typeof null; // 'object' (这是一个历史遗留问题) ``` `instanceof` 是一个操作符,用于判断一个对象是否是某个构造函数的实例。它返回一个布尔值,表示对象是否是该构造函数的实例[^3]。例如: ```javascript const arr = []; console.log(arr instanceof Array); // true ``` #### 2. 适用数据类型范畴 `typeof` 主要用于检测基本数据类型(如 `number`、`string`、`boolean`、`undefined`、`symbol`)和一些特殊值(如 `null` 和 `function`)。然而,对于引用类型(如数组、对象、函数等),`typeof` 的返回值通常为 `'object'` 或 `'function'`[^4]。 `instanceof` 则专注于检测对象是否是某个特定构造函数的实例。它依赖于原型链机制来判断对象的继承关系。例如: ```javascript class Animal {} const dog = new Animal(); console.log(dog instanceof Animal); // true ``` #### 3. 底层机制 `typeof` 的底层机制基于 JavaScript 引擎对值类型的直接识别。它不会涉及原型链或继承关系[^2]。 `instanceof` 的底层机制则依赖于原型链。具体来说,`A instanceof B` 的判断过程是:检查 `B.prototype` 是否存在于 `A.__proto__` 的原型链中。如果存在,则返回 `true`;否则返回 `false`[^3]。 #### 4. 使用场景 - **`typeof` 的使用场景**: - 检测基本数据类型。 - 快速判断变量是否未定义(`undefined`)。 - 区分函数与其他对象类型。 - **`instanceof` 的使用场景**: - 判断对象是否属于某个特定的构造函数。 - 在复杂继承关系中验证对象的类型。 #### 5. 综合运用案例分析 以下是一个综合使用 `typeof` 和 `instanceof` 的示例: ```javascript function getType(value) { if (value === null) return 'null'; if (typeof value === 'object') { if (Array.isArray(value)) return 'array'; if (value instanceof Date) return 'date'; return 'object'; } return typeof value; } console.log(getType(123)); // 'number' console.log(getType('hello')); // 'string' console.log(getType(null)); // 'null' console.log(getType([])); // 'array' console.log(getType(new Date())); // 'date' console.log(getType({})); // 'object' ``` 在上述代码中,结合了 `typeof` 和 `instanceof` 的优势,确保能够准确判断各种类型的值。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值