加入收藏 | 设为首页 | 会员中心 | 我要投稿 宁德站长网 (https://www.0593zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长资讯 > 动态 > 正文

JavaScript的数据类型你了解多少?

发布时间:2021-04-07 12:56:44 所属栏目:动态 来源:互联网
导读:数传参进来的 o,传递的是对象在堆中的内存地址值,通过调用 o.age = 24确实改变了 a 对象的 age 属性;但是代码中{name:haojie,age:30}却又把 o 变成了另一个内存地址,将{name: haojie, age: 30}存入其中,最后返回 b 的值就变成了 {name: haojie, age: 30}

数传参进来的 o,传递的是对象在堆中的内存地址值,通过调用 o.age = 24确实改变了 a 对象的 age 属性;但是代码中{name:'haojie',age:30}却又把 o 变成了另一个内存地址,将{name: 'haojie', age: 30}存入其中,最后返回 b 的值就变成了 {name: 'haojie', age: 30}。

其实,上面两个例子很显明地阐述了在Vue.js组件中data属性必须是一个函数而不是一个对象,每个实例可以维护一份被返回对象的独立的拷贝。

数据类型检测

第一种检测方法:typeof可以看到,前 6 个都是基础数据类型,而为什么第 6 个 null 的typeof是 object 呢?这里要和你强调一下,虽然 typeof null会输出 object,但这只是 JS 存在的一个悠久 Bug,不代表 null 就是引用数据类型,并且 null 本身也不是对象。因此,null 在 typeof 之后返回的是有问题的结果,不能作为判断 null 的方法。如果你需要在 if 语句中判断是否为null,直接通过 ===null来判断就好。

此外还要注意,引用数据类型 Object,用 typeof 来判断的话,除了 function 会正确判断以外,其余都是 object,是无法判断出来的。

第二种检测方法:instanceof

我们 new 一个对象,那么这个新对象就是它原型链继承上面的对象了,通过 instanceof我们能判断这个对象是否是之前那个构造函数生成的对象,这样就基本可以判断出这个新对象的数据类型。看到上述代码的实现,我们会总结这两个方法的差异性:

  1. instanceof可以准确地判断复杂引用数据类型,但是不能正确判断基础数据类型;
  2. typeof 也存在弊端,它虽然可以判断基础数据类型(null 除外),但是引用数据类型中,除了 function 类型以外,其他的也无法判断。

第三种检测方法:Object.prototype.toString

toString() 是 Object 的原型方法,调用该方法,可以统一返回格式为 “[object Xxx]” 的字符串,其中 Xxx就是对象的类型,第一个首字母要大写。对于 Object 对象,直接调用 toString()就能返回"[object Object]";而对于其他对象,则需要通过call来调用,才能返回正确的类型信息。

(编辑:宁德站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!