原始类型
Q:有哪几种数据类型
- A:String、number、bigint、boolean、undefined、symbol、null
Q:原始值是否可以被改变?
- A:不能,原始值不能被修改。
Q:javascript中的值被分为什么?
- A:原始值和对象。
Q:什么是原始值?
- A:符串、数字:在 JavaScript 中所有的数字都是浮点数、布尔值、
null
、undefined
Q:对象和原始值的区别有哪些?
-
A:
不同点 对象 原始值 能否添加属性与值 可以 不可以 没有内部标识能否按值比较 不可以 可以 标识存储内容 存储地址 值 是否有自己的方法 有 5️⃣ 【解释】
-
对象是可变的(即可以给对象添加属性和值),而原始值不行
var obj = {};
obj.foo = 123; // 添加属性和值
console.log(obj.foo) // 读属性,返回属性的值 123
var str = "abc";
str.foo = 123; // 添加属性(此操作将被忽略)
str.foo // 读属性的值,返回 undefined -
对象没有内部标识不能按值比较,而原始值可以。
//每个对象都有自己唯一的标识符
//因此通过字面量或构造函数创建的对象和任何其他对象都不相等
{}==={}//false
//对象是通过引用来比较的,只有两个对象有相同的标识,才认为这个对象是相等的。
var obj = {};
obj === obj //true
//原始值没有内部标识,原始值是按值比较的
//比较两个原始值的依据是他们的内容
"abc" === "abc" -
对象标识存储的是地址。
//变量保存了对象的引用,
var var1 = {};
var var2 = var1;
//因此,如果两个变量应用了相同的对象——我们改变其中一个变量时,两一个也会随之改变。
var1.foo = 123; // 修改变量 val1 的属性 123
var2.foo // val2 也改变了 123
-
数值
科学计数法
Q:科学计数法格式?
-
A:科学计数法允许字母
e
或E
的后面,跟着一个整数,表示这个数值的指数部分。123e3 // 123000
123e-3 // 0.123
Q:什么情况下JavaScript 会自动将数值转为科学计数法表示?
-
A:
-
小数点前的数字多于21位。
//多于21位的情况
1234567890123456789012
// 1.2345678901234568e+21
//等于21位的情况
123456789012345678901
// 123456789012345680000 -
小数点后的零多于5个。
// 小数点后紧跟5个以上的零,
// 就自动转为科学计数法
0.0000003 // 3e-7
// 否则,就保持原来的字面形式
0.000003 // 0.000003
-
浮点数
Q:是什么?
- A:阿伏伽德罗数(又称:科学记数法)——一种表示全部整数,分数或小数的方法。
Q:javascript中的数(number)存储方式是什么?
-
A:全部是浮点数,以二进制形式,使用64个位来存储。
存储规则:
0 - 51 位是 分数f(fraction ) 52 - 62 位是 指数(exponent ) 63 位 是 标志位 (sign)
说明 标志位 (s, sign) 指数(e, exponent ) 分数(f, fraction ) 所占大小 (1 bit) (11 bit) (52 bit) 位索引范围 63 62~52 51~0 值含义 0
表示正数,1
表示负数
决定了一个数的正负指数部分
决定了数值的大小小数部分(即有效数字)
决定了数值的精度
Q:为什么1===1.0为true
- A:JavaScript 语言的底层根本没有整数,所有数字都是小数(64位浮点数)
Q:为什么0.1+0.2===0.3为false
- A:浮点数不是精确的值
进制
Q:JavaScript 对整数提供的进制有哪些?
A:
-
进制 格式 是否默认转为十进制 十进制 没有前导0的数值。 八进制 有前缀 0o
或0O
的数值,或者有前导0、且只用到0-7的八个阿拉伯数字的数值。是 十六进制 有前缀 0x
或0X
的数值。是 二进制 有前缀 0b
或0B
的数值。是