1.typeof用以获取一个变量或者表达式的类型,typeof一般只能返回如下几个结果:

'number','boolean','string','function'(函数),'object'(NULL,数组,对象),'undefined' 都是字符串;

如:

/*
typeof方法返回一个字符串,来表示数据的类型
*/ console.log(typeof 'ssss'); // 'string' ---> 这返回的是 字符串
console.log(typeof 123); // 'number' ---> 这返回的是 字符串
console.log(typeof true); // 'boolean' ---> 这返回的是 字符串
console.log(typeof a); // 'undefined' ---> 这返回的是 字符串 function A(){
this.x = 1;
this.y = 'abc';
}
console.log(typeof A); // 'function' ---> 这返回的是 字符串 console.log(typeof [1,2,3]); // 'object' ---> 这返回的是 字符串
console.log(typeof {a:1, b:2}); // 'object' ---> 这返回的是 字符串 console.log( typeof window); // 'undefined' ---> 这返回的是 字符串

我们可以使用typeof来获取一个变量是否存在,如if(typeof a!="undefined"){},而不要去使用if(a)因为如果a不存在(未声明)则会出错;

正因为typeof遇到null,数组,对象时都会返回object类型,所以当我们要判断一个对象是否是数组时

或者判断某个变量是否是某个对象的实例则要选择使用另一个关键语法instanceof

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

/*
instanceof运算符可以用来判断某个构造函数的prototype属性是否存在于另外一个要检测对象的原型链上。 也就是 instanceof用于判断一个变量是否某个对象的实例
*/
console.log('a' instanceof Object); // false
console.log('a' instanceof String); // false
console.log(1 instanceof Number); // false
console.log({a:1, b:2} instanceof Object); // true
console.log([1,2,3] instanceof Array); // true
console.log([1,2,3] instanceof Object); // true function A(){
this.x = 1;
this.y = 'abc';
}
console.log(A instanceof Object); // true
console.log(A instanceof Function); // true
var a = new A();
console.log(a instanceof A);  // true
console.log(a instanceof Object); // true console.log(window instanceof Object); // ReferenceError: window is not defined
// ReferenceError: window is not defined
// 这里的 instanceof 测试的 object 是指 js 语法中的 object,不是指 dom 模型对象。

3.对象的constructor属性用于返回创建该对象的函数,也就是我们常说的构造函数;

返回类型:Array、Boolean、Date、Function、Number、Object、String

/*
对象的constructor属性用于返回创建该对象的函数,也就是我们常说的构造函数; 语法:
object.constructor 返回值:
对象的constructor属性返回创建该对象的函数的引用
*/
console.log([1,2,3].constructor); // [Function: Array]
console.log({a:1, b:2}.constructor); // [Function: Object] function A(){
this.x = 1;
this.y = 'abc';
}
console.log(A.constructor); // [Function: Function] var a = 1;
// console.log(1.constructor); // SyntaxError: Invalid or unexpected token
console.log(a.constructor); // [Function: Number] var b = 'abc';
console.log(b.constructor); // [Function: String]
console.log('abc'.constructor); // [Function: String] var c = true;
console.log(true.constructor); // [Function: Boolean]
console.log(c.constructor); // [Function: Boolean] var d = null;
// console.log(d.constructor); // TypeError: Cannot read property 'constructor' of null
// console.log(null.constructor); // TypeError: Cannot read property 'constructor' of null var e = '';
console.log(e.constructor); // [Function: String]
console.log(''.constructor); // [Function: String]

那么接下来,我就有个想法拉,如何判断一个对象的类型到底是 Array 还 Object 呢?

Method 1: obj.constructor 的方式

  console.log([1,2,3].constructor); // [Function: Array]
  console.log({a:1, b:2}.constructor); // [Function: Object]

Method 2: typeof 和 instanceof 相结合的方式

// 形式一
var a = new Array(1,2,3);
if(a && typeof a === 'object'){ // 数组 / null / 对象
if( a instanceof Array ){
console.log('a 是 Array');
}
else {
console.log('a 是 Object');
}
} // 形式二
var a = new Array(1,2,3);
if(typeof a === 'object'){ // 数组 / null / 对象
if( a instanceof Array ){
console.log('a 是 Array');
}
else if( a instanceof Object ){
console.log('a 是 Object');
}
else {
console.log('a 是 null');
}
}

typeof instanceof 和 obj.constructor的更多相关文章

  1. 深入剖析JavaScript中的数据类型判断(typeof instanceof prototype.constructor)

    关于JavaScript中的类型判断,我想大部分JavaScripter 都很清楚 typeof 和  instanceof,却很少有人知道 constructor,以及constructor与前面二 ...

  2. 类型判断----小白讲解typeof,instanceof,Object.prototype.toString.call()

    1.typeof只能判断基本类型数据, 例子: typeof 1 // "number" typeof '1' // "string" typeof true ...

  3. typeof + instanceof+toString+constructor什么推理javascript数据类型

    一个.typeof JS这些变量是弱类型(这是弱类型)的,它可以不管用来存储数据的类型的. typeof 数据类型可用于检测给定的变量.可能的返回值: 1. 'undefined' --- 这个值没有 ...

  4. Javascript中typeof instanceof constructor的区别

    typeof typeof,是一个运算符,运算中需要一个操作数,运算的结果就是这个操作数的类型,运算的结果是一个字符串.他有一定的局限性,对于对象类型的值,只能得到一个object结果,却不能精确得到 ...

  5. 推断js中的类型:typeof / instanceof / constructor / prototype

    怎样推断js中的类型呢,先举几个样例: var a = "jason"; var b = 123; var c = true; var d = [1,2,3]; var e = n ...

  6. javascript篇-typeof,instanceof,constructor,toString判断数据类型的用法和区别

    javascript基本数据类型有:string,number,Boolean,undefined,null 引用类型(复杂类型):object, ES6中新增了一种数据类型:Symbol 以上数据类 ...

  7. JavaScript之原型|typeof|instanceof

    //var 变量X --> 对象 --> 构造器 --> 原型对象 function Person(){}; var stu = new Person(); //var stu = ...

  8. typeof instanceof操作符的相关知识

    数据类型 ECMAScript中有5中基本数据类型:Undefined Null Boolean Number String. Typeof运算符 对一个值使用typeof操作符可能返回下列某个字符串 ...

  9. 小tip:关于typeof,instanceof,toString(),valueOf(),toLocaleString(),join(),reverse(),sort(),pop(),push(),shift(),unshift()

    typeof:用于检测一个变量是否是基本数据类型.instanceof用于检测某引用对象是什么类型的对象. var s = "Nicho"; var b = true; var n ...

随机推荐

  1. 编程之美 set 5 寻找数组中最大值和最小值

    解法 1. 设置 min, max 两个变量, 然后遍历一遍数组, 比较次数为 2*N 2. 依然设置 min, max 两个变量并遍历数组, 但将遍历的 step 设置为 2, 比较次数为 1.5 ...

  2. ios开发之 -- x-code删除描述文件

    描述文件所在的目录是:~/Library/MobileDevice/Provisioning\ Profiles/ 进入这个目录,删除所有描述文件.

  3. vue2.0非父子间进行通讯

    在vue中,父组件向之组件通讯使用的是props,子组件向父组件通讯使用的是$emit+事件,那非父子间的通讯呢,在官方文档上只有寥寥数笔, 概念很模糊,这个空的vue实例应该放在哪里呢,光放文档并没 ...

  4. iOS 设置字体 自定义字体

    博文转载至 http://blog.csdn.net/trandy/article/details/8364517 1.网上搜索字体文件(后缀名为.ttf,或.odf) 2.把字体库导入到工程的res ...

  5. 【BZOJ5071】[Lydsy十月月赛]小A的数字 发现性质

    [BZOJ5071][Lydsy十月月赛]小A的数字 题解:一般遇到这种奇奇怪怪的操作,常用的套路是将原序列差分一下,或者求个前缀和什么的.本题就是直接对原序列求前缀和,然后发现一次操作相当于交换两个 ...

  6. iOS消息推送证书创建过程

    iOS消息推送证书创建过程 一.创建证书请求 1.在mac上进行钥匙串访问(keychain) 2. 选择钥匙串访问>证书助理> 从证书颁发机构中请求一个证书,如图1所示 图1 3.输入你 ...

  7. 修改NavigationBar的分根线颜色

    [self.navigationController.navigationBar setShadowImage:[Static ColorToImage:[Static colorWithHexStr ...

  8. 在VMWare的虚拟机中设置共享文件夹(Linux-Ubuntu系统)

    1.点击菜单中的虚拟机---设置---选项---共享文件夹,选择总是开启: 2.添加主机共享的文件夹: 3.安装vmware tools: (1)打开虚拟机---安装vmware tools: (2) ...

  9. Django 框架之 Models

    1. 数据库配置 Django默认支持sqlite, mysql, oracle, postgresql 数据库: Django默认使用sqlite数据库,引擎名称:django.db.backend ...

  10. CF #301 E:Infinite Inversions(逆序数,树状数组)

    A-Combination Lock  B-School Marks   C-Ice Cave   D-Bad Luck Island   E-Infinite Inversions E:Infini ...