数据类型:
- 基本数据类型+引用数据类型
- Boolean
- 只有true、false两个值
- String
- String的意义不是‘字符串’,而是字符串的UTF16编码,国际标准中字符是以Unicode的方式表示的,UTF16和UTF8是Unicode的编码方式
- String的最大长度是什么?受到编码长度的影响
- 如何表示一个很长的数字?
-
Number
- 整数和小数都只有一个Numebr类型,Number类型的数字是按照双精度浮点数的规则来的
- 可能遇到浮点数运算的问题,所以不能直接对两个浮点数进行运算符 (浮点数精度问题)
-
Math.round(`${+number}e${precision}`) / Math.pow(10, precision); 一般的解决方法是,将数字升级为整数,乘以10的几次幂,为计算机能够精确识别的整数,再降级乘以10的几次幂
-
1.335.toFixed(2) // 1.33错的 ; Math.round(1.335e2) / Math.pow(10,2) //1.34对的
- 在JavaScript中,我们通过在数字后面加上字母
"e"
并指定零计数来缩短数字:https://javascript.info/number;"e"
将数字乘以1
给定的零计数。1e3 = 1 * 1000 ; 1.23e6 = 1.23 * 1000000
-
-
- Undefined
- undefined也是全局的变量,所以有的编程规范会使用void 0来替代undefined,因为很容易被改变。而且使用void 0进行运算编译的时间比undefined断,查看其他博文显示。
- undefined和null在JS中都表示无,这里追本溯源是因为,在java中null表示对象,但是创始人觉得null无法代表基本数据类型的无,所以创造了undefined
- undefined和null几乎一样,但是在转数字上undefined会转为NaN,null会转为0
- Null
- 只有一个值null
- Symbol
- Object
- Boolean
- 对象类型包括:
- Object
- Array
- Function
- String
- Boolean
- Number
- Date
- RegExp
- Error
- ...
区别:
- 3和new Number(3)的区别?
- 一个是Number类型,一个是对象类型
- JS内存空间:堆栈
- 栈内存: 存放基本数据类型,和引用数据类型的指针
- 堆内存:存放引用数据类型(对象)和闭包
- 池:存放常量
- 变量的复制
- 基本数据类型:直接在栈中重新开启空间给赋值的变量
- 引用数据类型,在栈中添加一个变量和指针指向堆中的对象;所以对属性的操作会影响原对象
问题?
1. - null和undefined:为什么JS中有两个表达‘无’的数据类型?
- 为什么有的编程规范要求用void 0 代替undefined?
2. ES6新增加的Symbol是什么东西?
3. 字符串有最大长度吗?
- 因为JS是UTF16的编码方式, 所以字符串的长度受到编码长度的影响
4. 为什么给对象添加的方法能用在基础数据类型上?
- 运算符提供了装箱操作(把基本数据类型转为为对应的对象),它会根据基础类型构造一个临时对象,使我们能在基础类型上调用对应对象的方法。
考点:
- 为什么console.log(0.1+0.2 == 0.3) 输出false
- 因为JS类型为Number的数字是按照双精度浮点数的规则,浮点数的特点是不能使用==或===进行比较。这是浮点数的特点
- 所以错误不是false的结论而是比较的方法错了,可以使用ES6提供的最小精度值进行比较console.log(Math.abs(0.1+0.2-0.3) < Number.EPSILON)
- 深拷贝/浅拷贝
- 了解原理
- 数据类型的判断
- typeof
- 用于判断基本数据类型和function
- A instanceof B
- 用于判断对象的类型
- 判断构造函数B的prototype是否在实例对象A的原型链上。如果在则A是B的实例对象,返回true
- 但是不能判断数组;(因为Object的prototype间接的在原型链上)
- [] instanceof Array //true
[] instanceof Object //true
- Array.isArray() 判断数组
- Object.prototype.toString.call(x)
- 判断所有的数据类型
- ,返回的类型格式为[object,xxx],xxx是具体的数据类型
- Number/String/Boolean/Undefined/Null/Function/Array/Object/RegExp/Date/Error/HTMLDocument/Window
- 原因:每个类型都有toString方法,都对其进行了重写
- typeof
- 原型链(对象属性的查找)
- 每个对象都有与之相关联的对象,为了查找对象的属性
- 实例对象的__proto__ = 构造函数的prototype; 即实例对象的原型链
- 闭包 (函数对象)