写点什么

JavaScript 数据类型

作者:源字节1号
  • 2022 年 5 月 12 日
  • 本文字数:874 字

    阅读完需:约 3 分钟

JavaScript数据类型

原始类型

JavaScript 中原始类型有六种,原始类型既只保存原始值,是没有函数可以调用的。

六种原始类型

  • string

  • number

  • boolean

  • null

  • undefined

  • symbol

为什么说原始类型没有函数可以调用,但'1'.toString()却又可以在浏览器中正确执行?

因为'1'.toString()中的字符串'1'在这个时候会被封装成其对应的字符串对象,以上代码相当于new String('1').toString(),因为new String('1')创建的是一个对象,而这个对象里是存在toString()方法的。


null 到底是什么类型

现在很多书籍把null解释成空对象,是一个对象类型。然而在早期JavaScript的版本中使用的是 32 位系统,考虑性能问题,使用低位存储变量的类型信息,000开头代表对象,而null就代表全零,所以将它错误的判断成Object,虽然后期内部判断代码已经改变,但null类型为object的判断却保留了下来,至于null具体是什么类型,属于仁者见仁智者见智,你说它是一个bug也好,说它是空对象,是对象类型也能理解的通。

对象类型

在 JavaScript 中,除了原始类型,其他的都是对象类型,对象类型存储的是地址,而原始类型存储的是值。

var a = [];var b = a;a.push(1);console.log(b); // 输出[1]
复制代码

在以上代码中,创建了一个对象类型a(数组),再把a的地址赋值给了变量b,最后改变a的值,打印b时,b的值也同步发生了改变,因为它们在内存中使用的是同一个地址,改变其中任何一变量的值,都会影响到其他变量。


对象当做函数参数

function testPerson(person) {  person.age = 52;  person = {    name: '李四',    age: 18  }  return person;}var p1 = {  name: '张三',  age: 23}var p2 = testPerson(p1);console.log(p1.age);  // 输出52console.log(p2.age);  // 输出18
复制代码

代码分析

  1. testPerson函数中,person传递的是对象p1的指针副本

  2. 在函数内部,改变person的属性,会同步反映到对象p1上,p1对象中的age属性发生了改变,即值为 52

  3. testPerson函数又返回了一个新的对象,这个对象此时和参数person没有任何关系,因为它分配了一个新的内存地址

  4. 以上分析可以用如下图表示



如若转载,请注明出处:开源字节   https://sourcebyte.cn/article/123.html

用户头像

源字节1号

关注

一个着迷于技术又喜欢不断折腾的技术活跃者 2022.03.09 加入

一个着迷于技术又喜欢不断折腾的技术活跃者。喜欢并热爱编程,执着于努力之后所带来的美好生活!

评论

发布
暂无评论
JavaScript数据类型_软件开发_源字节1号_InfoQ写作社区