对于7种原始类型及简单详解

191 阅读3分钟

个人理解

undefined类型

undefined是预定义的全局变量,当变量声明后没有赋值,那么它就等于“undefined”或者当调用函数时应该提供参数时没有提供,那么没有提供的参数就为“undefined”。

var num;        
console.log(num); // undefined
 
function fn(x){  
    console.log(x);// undefined
}
fn()

null类型

在JavaScript中null代表的是:空值,当用typeof去检测null的时候,它会返回一个“object”

console.log(typeof null); // object

因为我们的null值它表示一个空对象指针,它代表的就是一个空对象,所有用typeof去检测时是“object”,且我们的null类型在JavaScript中也是

console.log(null + 1); // 1

Number类型

在我个人理解就是Number它是整数浮点类型,他也是一个方法,可以强制把字符串类型转换成整数

console.log(Number('123')); // 123 

console.log(Number('abc')); // NaN

上列代码有一个为什么为NaN,因为NaN它拿到的不是自己想要的,且NaN它与任何值都不相等(包括它自己)。

String类型

字符串类型是常常用到的一种类型,我们可以用一个属性计算字符串的长度:length

var str = 'abcd'console.log(str.length); // 4

如果要转换成字符串类型的话可以用:to.String()和加上空的字符串

var str = 123console.log(str.toString()); // '123'

//更简单的方式
var str = 123
console.log(str + ''); // '123'

Boolean类型

Boolean它有两个值,一个是true,一个是false,判断是否一样。

若是用不全等来看的话他 1 以上都是 true, 0 和 空字符串都为 false。

console.log(1 == true);       // trueconsole.log(0 == false);      // trueconsole.log(1 === true);      // falseconsole.log(0 === false);     // falseconsole.log('1' == true);     // trueconsole.log('' == false);     // trueconsole.log('123' === true);  // falseconsole.log('123' === false); // false

且这两个值可以计算:true 为 1 , false 为 0

console.log(true + false); // 1
console.log(true + 1);     // 2
console.log(false + 1);    // 1

Symbol类型

根据规范,对象的属性键只能是字符串类型或者 Symbol 类型。不是 Number,也不是 Boolean,只有字符串或 Symbol 这两种类型。

Symbol 它的值表示唯一标识符

切比较特殊,它不会被自动转换。

更详细的看:juejin.cn/post/684490…

新增的BigInt类型

BigInt类型可以表示任意大的整数。

可以在整数字面量后面加 n 的方式定义一个BigInt,如:10n,或者调用函数BigInt()

var num = 999999n;

var num1 = BigInt(999999);
相当于 // num1 = 999999n 

var numstr = BigInt('999999');
相当于 // num1 = 999999n 

注意:

它不能用与Math对象中的方法。

不能和任何Number实例混合运算,两个都必须转换成同一种类型。

BigInt 和 Number 全等为 false,宽松等于是 true。

0n === 0;      // false
0n == 0;       // true

若是该整数大于了JS Number 类型所能表示的最大整数,因此,它被四舍五入的。意外四舍五入会损害程序的可靠性和安全性。

// 注意最后一位的数字
9007199254740992 === 9007199254740993;    // true

解决方法:

创建一个 BigInt,只需要在末尾加一个 n,或者可以调用 BigInt() 构造函数

9007199254740992n === 9007199254740993;    // false

console.log(BigInt('9007199254740992') === BigInt('9007199254740993')) // false