Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

JS数据类型 #29

Open
conan1992 opened this issue Jun 20, 2020 · 0 comments
Open

JS数据类型 #29

conan1992 opened this issue Jun 20, 2020 · 0 comments

Comments

@conan1992
Copy link
Owner

1. 基本数据类型

  • null
  • undefined
  • boolean
  • string
  • number
  • symbol(es6)

2. 引用类型

  • Object
  • Array
  • Function
  • RegExp
  • Date
  • 单体内置对象:Global,Math
  • 基本包装类型:Boolean,Number,String

3.应用场景

  • 基本包装类型
var s1 = "some text";
var s2 = s1.substring(2);

第2行代码访问s1时,访问过程处于一种读取模式,也就是要从内存中读取这个字符串的值,而在读取模式中访问字符串时,后台都会自动完成下列处理:(1)创建String类型的一个实例;(2)在实例上调用指定的方法;(3)销毁这个实例;
可以想象成执行了以下代码

var s1 = new String("some text");
var s2 = s1.substring(2)
s1 = null

注:引用类型和基本包装类型的主要区别在于对象的生存期,使用new操作符创建的引用类型的实例,在执行流离开当前作用域之前都一直保存在内存中;而自动创建的基本包装类型的对象,只存在于一行代码执行瞬间,然后立即被销毁;

  • null不是对象

虽然 typeof null 会输出 object,但是这只是 JS 存在的一个悠久 Bug。在 JS 的最初版本中使用的是 32 位系统,为了性能考虑使用低位存储变量的类型信息,000 开头代表是对象然而 null 表示为全零,所以将它错误的判断为 object

  • 0.1+0.2为什么不等于0.3?

0.1和0.2在转换成二进制后会无限循环,由于标准位数的限制后面多余的位数会被截掉,此时就已经出现了精度的损失

  • 函数参数
    函数传参的时候传递的是对象在堆中的内存地址值

参考

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant