JS数据类型和对象数据类型
基本数据类型(值类型)
- 数字类型(Number)
- 布尔类型(Boolean)
- Undefined
- 字符串(String)
- null
引用数据类型
对象数据类型(object)
- 普通对象
- 数组对象
- 正则对象
- 日期对象
- ···
函数(function)
下面代码的运行结果和原因
function test(person) {
person.age = 26
person = {
name: 'hzj',
age: 18
}
return person
}
const p1 = {
name: 'fyq',
age: 19
}
const p2 = test(p1)
console.log(p1) // -> ?
console.log(p2) // -> ?
结果:
p1: {age: 26, name: "fyq"}
p2: {age: 18, name: "hzj"}
原因
由于const修饰对象p1,保证指向这个对象的指针是固定的,在test函数中.参数传递的是p1对象的指针,这个指针是无法被修改的,但是可以修改对象里面的数据,因而p1的结果中,age的值被修改,然而name没有被修改
而test(p1)的结果不是p1,p2接收的是test函数中的对象
null是对象嘛?为什么?
Null从逻辑角度看是对象Null是只有一个值的数据类型,这个特殊值是null,null可以理解为表示一个空对象指针。因此,用typeof操作符检测null时,会得到object
然鹅!!事情并没有那么简单!
在 JavaScript 中,typeof 操作符返回一个对象,表示未经计算的操作数的类型。 null 有时会被当作一种对象类型,但是这其实只是语言本身的一个 bug,即对 null 执行 typeof null 时会返回字符串 "object"。实际上,null 本身是基本类型(从前面的分类也可以看出这一点)
结论
在某种程度上理解为null实为object类型的一个特殊值,null准备用来在将来保存对象。所以,可以认为null还是一个基本类型而不是对象。
'1'.toString()为什么可以调用?
首先,'1'实际上是string类型
作为string类型调用toString()得到 "1"
写到这里我突发奇想,如果
1.toString()会产生什么呢?没错!这里报错了,那为什么会报错呢?在百度翻译的帮助下我明白了这里的语法错误。 在JS中,点操作符意味着调用object的属性或者一个浮点数
当
.跟在一个数字后面意味着这个数字是一个浮点数,所以这里会出现报错当然这里和本题就没什么关系了hhh
0.1+0.2为什么不等于0.3?
看到这个题目我愣了一下,不等于0.3那等于什么呢?
果然是我才疏学浅,在Javascript中,二进制的0.1和0.2并不是很精确因为每一个变量的存储空间是有限的。整数通常是2个字节,浮点数最大8个字节。那么它能表示的数字大小也是有限的。
尤其是对于浮点数来讲,小数点后的位数是可以无穷尽的。当表示一个小数时,计算机会由于空间有限而对二进制的数据进行部分的舍弃。
这样就导致了误差的出现。
这里有个来自百度知道的一个详细计算




