1.数据类型
Undefined,Null,Boolean,Number,String,Symbol,BigInt,Object
2.Undefined类型
Undefined类型只有一个值,就是特殊值undefined。 当使用var和let声明变量但是没有初始化时,就相当于给变量赋予了undefined值。
let message;
console.log(message); //undefined
var name;
console.log(name); //undefined
3.Null类型
Null类型有且仅有唯一值null,表示一个空对象指针。若定义一个变量将要用来保存对象值时,建议使用null来初始化。这样当判断这个变量是否为null时就可以判断这个对象是否被重新赋值了一个对象的引用
let car = null; //表示这个变量未来是用来保存对象的
。。。一些操作
if(car != null){
// car 重新赋值了一个对象的引用
}
4.Undefined和Null的区别?
共同点:Undefined和Null都是基本数据类型有且仅有唯一值分别是undefined和null。
不同点:undefined表示这个值已定义但是未赋值。null表示这是个空对象指针,未来会重新引用一个对象。
console.log(undefined == null) // true
// 进行了隐式类型转换,转换后的值进行的比较
console.log(undefined === null) //false
// 两者类型不同,所以结果是false
5.Boolean
布尔值,有两个值:true和false。
其他数据类型转换成布尔类型通过Boolean()函数。需要理解。因为会有隐式数据类型转换。比如if中的判断。
| 数据类型 | 转化为true | 转化为false |
|---|---|---|
| String | 非空字符串 | ""(空字符串) |
| Number | 非零值(包括无穷值) | 0和NaN |
| Object | 任意对象 | null |
| Undefined | N/A(不存在) | undefined |
6.Number类型
Number表示整数和浮点数
1. 整数:
- 十进制,最基本的数值就表示的是十进制
- 八进制,第一个数字必须是0,其他数字就是八进制数字(0-8),如果其他数字超出了应有的范围,就会忽略前面的0,后面的数字会被当作十进制。若是在严格模式下这样使用会报错,若使用前缀未为0o。
let ocatalNum1 = 070; // 表示八进制,56
let ocatalNum2 = 079; // 无效八进制,当成79
- 十六进制:0x开头,其他数字(0-9,A-F),
2. 浮点数:
数值中必须有小数点,且小数点后必须至少有一位数字。因为存储浮点数使用的内存空间是存储整数的两倍。所以当小数点后没有数字或者数字为0时会转化成整数。
科学计数法:表示一个应该乘以10的给定次幂的数值。格式:数值(整数或者浮点数)+ e + 乘以十的多少次幂
let floatNum1 = 3.125e7; // 等于31250000
let floatNum1 = 3e-7; // 等于0.0000003
浮点数的精确度最高可达17位小数。所以就会遇到为什么0.1 + 0.2 != 0.3?
let a = 0.1;
let b = 0.2;
console.log(a+b) //0.30000000000000004
因为计算机是以二进制进行存储且进行计算的。因为这两个数都是无限循环的数,最后计算结果是0.30000000000000004而不是0.3(具体大家可以去搜搜,我这边是为了面试准备所以就不详细展开)
3. NaN:表示“不是数值(Not a number)”,用于表示本来要返回数值的操作失败了(不是抛出错误)。
比如:
console.log(0/0) // NaN
比较独特的属性:
- NaN的任何操作都会返回NaN。
- NaN不等于包括NaN在内的所有值。
- isNaN()函数专门来判断,是否“不是数值”
console.log(isNaN(NaN)) //true
console.log(isNaN(10)) //false
console.log(isNaN("10")) //false 因为“10”可以转换成数值10所以结果位为false
console.log(isNaN("blue")) //true 因为"blue"不能转换为数值。
那typeof NaN结果是什么?
4.数值转换
用来进行数值转换的函数:Number(),parseInt(),parseFloat(); Number()转型函数,可以用于任何数据类型
- 布尔值:true转换为1,false转换为0;
- 数值:直接返回
- null:返回0
- undefined: 返回NaN
- 字符串
- 数字组成,忽略前面的0,转换为十进制数
- 浮点值也是忽略前面的0转换成相应的浮点值。
- 八进制需要写成“0o12”的形式,会转换成十进制数值输出
- 十六进制也是会转换成对应的十进制数值输出
- 空字符串转换为0
- 其他情况输出NaN
Number("1"); //1
Number("015"); //15
Number("01.5"); //1.5
Number("0o44"); //36
Number("0xf"); //15
Number(""); // 0
Number("1dgah"); // NaN
- 对象,调用valueOf()方法,并按照上述规则转换返回的值。如果结果是NaN,则调用toString()方法,再按字符串规则转换。
parseInt():从第一个非空字符开始转换。空字符串也会返回NaN, 如果第一个字符是数值字符,加号或者减号,会继续依次检测每个字符,直到结尾或者遇到非数值字符。
parseInt(""); //NaN 与Number()方法不同
parseInt("123sgz"); //123 "sgz"会被忽略
parseInt("45saa444"); //45 遇到非数值就会截至。
parseInt("22.5"); //22 因为是整数所以会被忽略
parseFloat():解析到字符串末尾或者解析到一个无效的浮点数值字符为止;始终会忽视字符串开头的0;因为这个方法只能解析十进制。
7.String类型
表示零或者多个16位Unicode字符序列。 字符串的长度可以通过length属性获取
let msg = "hello"
console.log(msg.length) //5
1.数值转换
- toString() 可用于布尔值,数值,对象和字符串值。null和undefined没有toString()方法。
- String()
- 如果值有toString方法,则调用该方法,并返回结果
- 如果值是null,返回"null"
- 如果值是undefined,返回"undefined"
8.Symbol 符号类型
用途:确保对象属性使用唯一标识符,不会发生属性冲突的危险。 基本用法:需要使用Symbol()函数初始化。 也可传入一个字符串作为对符号的描述,可以通过这个字符串来调试代码
let sym = Symbol();
console.log(typeof sym) // symbol
let genericSymbol = Symbol("foo")
let otherFooSymbol = Symbol("foo")
console.log(genericSymbol == otherFooSymbol) //false
// 那当我们不同的部分需要共享和重用符号实例,应该怎么操作呢?
// 使用Symbol.for()方法
let genericSymbol = Symbol.for("foo")
let otherFooSymbol = Symbol.for("foo")
console.log(genericSymbol === otherFooSymbol) //true
使用Symbol.keyFor()方法用来接收符号对应的字符串键
let s = Symbol.for("foo"); //必须是全局符号,若不是就是没有用Symbol.for()方法生成的符号,就会返回undefined
console.log(Symbol.keyFor(s)) //foo
let s1 = Symbol("bar");
console.log(Symbol.keyFor(s1)) //undefined