一、typeof判断数据类型(判断数组跟对象都返回object)

console.log(typeof null); // "object"
console.log(typeof function () {
return 1;
}); // "function"
console.log(typeof '梦龙小站'); // "string"
console.log(typeof 1); // "number"
console.log(typeof a); // "undefined"
console.log(typeof undefined); // "undefined"
console.log(typeof []); // "object"
console.log(typeof NaN); // "number"
console.log(typeof {}); // "object"

二、instanceof判断对象的原型链是否是指向构造函数的prototype

  var arr = [1,2,3,1];
  console.log(arr instanceof Array)//true

三、对象的constructor属性

  var arr = [1,2,3,1];
  console.log(arr.constructor === Array)//true

四、Object.prototype.toString.call(arr)
  利用对象的toString可以准确判断是什么类型,call()改变this指向,这里是借用Object的方法,然后有人可能会问为什么不直接用arr.toString而要借用Object的方法,
  我们看下面
  

console.log(Object.prototype.toString.call("jerry"));//[object String]
console.log(Object.prototype.toString.call(12));//[object Number]
console.log(Object.prototype.toString.call(true));//[object Boolean]
console.log(Object.prototype.toString.call(undefined));//[object Undefined]
console.log(Object.prototype.toString.call(null));//[object Null]
console.log(Object.prototype.toString.call({name: "jerry"}));//[object Object]
console.log(Object.prototype.toString.call(function(){}));//[object Function]
console.log(Object.prototype.toString.call([]));//[object Array]
console.log(Object.prototype.toString.call(new Date));//[object Date]
console.log(Object.prototype.toString.call(/\d/));//[object RegExp]
console.log(Object.prototype.toString.call(new Person));//[object Object]

直接用toString

console.log("jerry".toString());//jerry
console.log((1).toString());//
console.log([1,2].toString());//1,2
console.log(new Date().toString());//Wed Dec 21 2016 20:35:48 GMT+0800 (中国标准时间)
console.log(function(){}.toString());//function (){}
console.log(null.toString());//error
console.log(undefined.toString());//error

  因为toString为Object原型上的方法,而Array、Function都是Object的实例,实例重新改写了原型上的toString方法,不同的对象调用toString方法,调用的是改写之后的方法

  (转成各种类型的字符串),而不会调用Object原型上的toString()方法,因此直接调用不能判断对象类型

var arr=[1,2,3];
console.log(Array.prototype.hasOwnProperty("toString"));//true
console.log(arr.toString());//1,2,3
delete Array.prototype.toString;//delete操作符可以删除实例属性
console.log(Array.prototype.hasOwnProperty("toString"));//false
console.log(arr.toString());//"[object Array]"

  我们可以看到,删除实例上的toString方法后调用的是Object原型上的toString()方法,返回对象类型

五、es6的方法——Array.isArray()

  

Array.isArray([]) //true

六、看好多博客说用length判断,这个其实不准确

var obj={a:1}
var arr = []
console.log(obj.length)//undefined
console.log(arr.length)// obj.length = 1
console.log(obj.length)//

对象可以直接添加length这个属性,就无法区分了

最新文章

  1. iOS 键盘添加完成按钮,delegate和block回调
  2. IOS 断点下载
  3. Zookeeper-Zookeeper的配置
  4. codeforces 490B.Queue 解题报告
  5. 记录对依赖注入的小小理解和autofac的简单封装
  6. NSJSONSerialization介绍
  7. intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
  8. [rxjs] Demystifying Cold and Hot Observables in RxJS
  9. #最小生成树# #kruskal# ----- OpenJudge丛林中的路
  10. css3的动画特效--动画序列(animation)
  11. .net Winfrom 僵尸窗口 的问题
  12. tp5分页后数据处理
  13. Python基础------列表,元组的调用方法
  14. GitHub学习总结
  15. android-------Android Studio使用MAT分析工具遇到的错误
  16. css 中的grid布局基础
  17. 从输入URL到页面加载的过程?由一道题完善自己的前端知识体系!
  18. 若是汉字的一半,就舍弃这个汉字输出,例如:“js3范ad啊asd”,截取4,则输出:“js3”
  19. 【转】Spring MVC处理静态资源
  20. 图解Win7如何手动添加受信任证书

热门文章

  1. 2万字长文包教包会 JVM 内存结构 保姆级学习笔记
  2. HTTP请求方式及常见问题
  3. 题解 洛谷 P3825 【[NOI2017]游戏】
  4. 前端学习(十四):CSS布局
  5. 服务器入侵应急响应排查(Linux篇)
  6. Java数据结构和算法(2)之稀疏数组
  7. Python 为什么要有 pass 语句?
  8. It还是高薪行业不?—软件测试
  9. 在Windows上安装MySQL(转整)
  10. C/C++编程笔记:C语言进制详解,二进制、八进制和十六进制!