javascript怎么判断数据类型

js判断数据类型的方法:1、利用typeof操作符,语法“typeof 变量”;2、利用instanceof运算符;3、利用constructor属性,语法“变量.constructor==数据类型”;4、利用toString()函数。

javascript怎么判断数据类型

本教程操作环境:windows7系统、javascript1.8.5版、Dell G3电脑。

javascript判断数据类型的方法

1、typeof

   typeof 是一个操作符,其右侧跟一个一元表达式,并返回这个表达式的数据类型。

  返回的结果用该类型的字符串(全小写字母)形式表示,包括以下 7 种:string、number、boolean、symbol、undefined、object、function 等。

立即学习“Java免费学习笔记(深入)”;

typeof 'a'; // string 有效typeof 1; // number 有效typeof true; //boolean 有效typeof Symbol(); // symbol 有效typeof undefined; //undefined 有效typeof new Function(); // function 有效typeof null; //object 无效typeof [1] ; //object 无效typeof new RegExp(); //object 无效typeof new Date(); //object 无效

登录后复制

总结:

对于基本类型,除 null 以外,均可以返回正确的结果。对于引用类型,除 function 以外,一律返回 object 类型。对于 null ,返回 object 类型。对于 function 返回  function 类型。

  其中,null 有属于自己的数据类型 Null ,引用类型中的数组、日期、正则 也都有属于自己的具体类型,而 typeof 对于这些类型的处理,只返回了处于其原型链最顶端的 Object 类型。

2、instanceof

  instanceof 检测的是原型,表达式为:A instanceof B,如果 A 是 B 的实例,则返回 true,否则返回 false。

[] instanceof Array; // truenew Date() instanceof Date;// true function Person(){};new Person() instanceof Person;//true [] instanceof Object; // truenew Date() instanceof Object;// truenew Person instanceof Object;// true

登录后复制

  虽然 instanceof 能够判断出 [ ] 是Array的实例,但它认为 [ ] 也是Object的实例,为什么呢?

   从 instanceof 能够判断出 [ ].__proto__  指向 Array.prototype,而 Array.prototype.__proto__ 又指向了Object.prototype,最终 Object.prototype.__proto__ 指向了null,标志着原型链的结束。因此,[ ]、Array、Object 就在内部形成了一条原型链,如下图所示:

javascript怎么判断数据类型

 

   从原型链可以看出,[] 的 __proto__  直接指向Array.prototype,间接指向 Object.prototype,所以按照 instanceof 的判断规则,[] 就是Object的实例。依次类推,类似的 new Date()、new Person() 也会形成一条对应的原型链 。

  因此,instanceof 只能用来判断两个对象是否属于实例关系, 而不能判断一个对象实例具体属于哪种类型。 

    针对数组的这个问题,ES5 提供了 Array.isArray() 方法 。该方法用以确认某个对象本身是否为 Array 类型,而不区分该对象在哪个环境中创建。

if (Array.isArray(value)){   //对数组执行某些操作}

登录后复制

  Array.isArray() 本质上检测的是对象的 [[Class]] 值。

  [[Class]] 是对象的一个内部属性,里面包含了对象的类型信息,其格式为 [object Xxx],Xxx 就是对应的具体类型 。对于数组而言,[[Class]] 的值就是 [object Array] 。

【相关推荐:javascript学习教程

3、constructor

  当一个函数 F被定义时,JS引擎会为F添加 prototype 原型,然后再在 prototype上添加一个 constructor 属性,并让其指向 F 的引用。如下图所示:

javascript怎么判断数据类型

   当执行 var f = new F() 时,F 被当成了构造函数,f 是F的实例对象,此时 F 原型上的 constructor 传递到了 f 上,因此 f.constructor == F

javascript怎么判断数据类型

  可以看出,F 利用原型对象上的 constructor 引用了自身,当 F 作为构造函数来创建对象时,原型上的 constructor 就被遗传到了新创建的对象上, 从原型链角度讲,构造函数 F 就是新对象的类型。这样做的意义是,让新对象在诞生以后,就具有可追溯的数据类型。 

  同样,JavaScript 中的内置对象在内部构建时也是这样做的,如下图所示。

javascript怎么判断数据类型

总结:

  1. null 和 undefined 是无效的对象,因此是不会有 constructor 存在的,这两种类型的数据需要通过其他方式来判断。

  2. 函数的 constructor 是不稳定的,这个主要体现在自定义对象上,当开发者重写 prototype 后,原有的 constructor 引用会丢失,constructor 会默认为 Object。

4、toString

  toString() 是 Object 的原型方法,调用该方法,默认返回当前对象的 [[Class]] 。这是一个内部属性,其格式为 [object Xxx] ,其中 Xxx 就是对象的类型。

  对于 Object 对象,直接调用 toString()  就能返回 [object Object] 。而对于其他对象,则需要通过 call / apply 来调用才能返回正确的类型信息。

  语法:Object.prototype.toString.call(value);

Object.prototype.toString.call('') ;   // [object String]Object.prototype.toString.call(1) ;    // [object Number]Object.prototype.toString.call(true) ; // [object Boolean]Object.prototype.toString.call(Symbol()); //[object Symbol]Object.prototype.toString.call(undefined) ; // [object Undefined]Object.prototype.toString.call(null) ; // [object Null]Object.prototype.toString.call(new Function()) ; // [object Function]Object.prototype.toString.call(new Date()) ; // [object Date]Object.prototype.toString.call([]) ; // [object Array]Object.prototype.toString.call(new RegExp()) ; // [object RegExp]Object.prototype.toString.call(new Error()) ; // [object Error]Object.prototype.toString.call(document) ; // [object HTMLDocument]Object.prototype.toString.call(window) ; //[object global] window 是全局对象 global 的引用

登录后复制

更多编程相关知识,请访问:编程视频!!

以上就是javascript怎么判断数据类型的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2712403.html

(0)
上一篇 2025年3月7日 21:13:06
下一篇 2025年3月7日 21:13:14

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • JavaScript如何获取id属性

    在js中,可以使用getAttribute方法获取id属性,语法格式为“对象.getAttribute(id名称)”。“getAttribute()”方法是一个函数,它只有一个参数(打算查询的属性名字),通过元素节点对象调用。 本教程操作环…

    2025年3月7日
    000
  • JavaScript中typeof怎么用

    在js中,typeof的用法是“typeof(表达式)”或“typeof 变量名”,typeof是一个一元运算,放在一个运算数之前,运算数可以是任意类型。它返回值是一个字符串,该字符串说明运算数的类型。 本教程操作环境:windows7系统…

    2025年3月7日
    200
  • asp与javascript的区别是什么

    区别是:asp是网页的一种格式,ASP是“Active Server Page”的缩写,意为“动态服务器页面”;javascript是一种面向对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言。 本教程操作环境:wi…

    2025年3月7日
    200
  • javascript主要作用是什么

    主要作用:1、嵌入动态文本于HTML页面;2、读写HTML元素;3、对浏览器事件作出响应;4、在数据被提交到服务器之前验证数据;5、检测访客的浏览器信息;6、控制cookies,包括创建和修改;7、基于node.js技术进行服务器端编程等。…

    2025年3月7日
    200
  • javascript是什么公司开发的

    javascript是Netscape公司开发的。JavaScript最初由Netscape的Brendan Eich设计,最初将其脚本语言命名为LiveScript,后来Netscape在与Sun合作之后将其改名为JavaScript。 …

    2025年3月7日
    200
  • Javascript如何实现submit功能

    在js中,可以使用submit方法实现表单submit功能,语法格式为“form对象.submit()”该方法把表单数据提交到Web服务器,提交表单的方式与用户单击Submit按钮一样,但表单的onsubmit事件句柄不会被调用。 本教程操…

    2025年3月7日
    200
  • javascript用哪个关键字声明变量

    在js中,可以使用var、let和const关键字声明。var声明的变量可以用来保存任何类型的值,范围是函数作用域;let声明的变量在{}中使用,变量的作用域限制在块级域中;const用于修饰常量,声明位置不限。 本教程操作环境:windo…

    2025年3月7日
    200
  • javascript如何在object中删除属性

    在js中,可以使用delete关键字在object中删除属性,语法格式为“delete object.属性”。delete操作符用于删除对象的某个属性,当delete操作符返回true时表示可以删除,返回false表示不能删除。 本教程操作…

    2025年3月7日
    200
  • typescript和javascript的区别有哪些

    区别有:JavaScript是轻量级的解释性脚本语言,能够实现浏览器端丰富的交互功能,为用户带来流畅多样的用户体验;TypeScript是 面向对象的编程语言,包含JavaScript所有元素,并扩展了JavaScript的语法。 本教程操…

    2025年3月7日
    200
  • javaScript什么叫事件源

    在事件中,当前操作的那个元素就是事件源,比如网页元素中input有onclick事件,当点击input发送onclic事件时,事件源就是input。事件源是作为event对象的属性存在的,可以使用srcElement属性来获取事件源。 本教…

    2025年3月7日
    200

发表回复

登录后才能评论