8种数据类型(7种原始数据类型、1种复杂数据类型)
Number:代表数字,可以是整数或小数。 String:代表文本,可以使用单引号、双引号或反引号括起来。 Boolean:代表布尔值,只有两个可能的值,即 true 和 false。 Null:代表空值,表示一个变量没有值。 Undefined:代表未定义的值,表示一个变量没有被赋值。 Symbol:代表唯一的标识符,用于对象属性的键。 BigInt: 表示任意大小的整数
如果数据类型是字符串,先调用 valueOf() 方法,然后再调用 toString() 方法。 如果数据类型是数值、布尔值或 null,先调用 toString() 方法,然后再调用 valueOf() 方法。 如果数据类型是 undefined,直接报错。
// 字符串
var str = "hello";
console.log(str.toString()); // "hello"
console.log(str.valueOf()); // "hello"
// 数字
var num = 123;
console.log(num.toString()); // "123"
console.log(num.valueOf()); // 123
// 布尔值
var bool = true;
console.log(bool.toString()); // "true"
console.log(bool.valueOf()); // true
// null
var n = null;
console.log(n.toString()); // "null"
console.log(n.valueOf()); // TypeError: Cannot convert null to object
// undefined
var u;
console.log(u.toString()); // TypeError: Cannot convert undefined to object
console.log(u.valueOf()); // TypeError: Cannot convert undefined to object
// let s1 = "some text";
// let s2 = s1.substring(2);
// =
let s1 = new String("some text");
let s2 = s1.substring(2);
s1 = null;
// Number
let numberObject = new Number(10);
let numberValue = 10;
console.log(typeof numberObject); // "object"
console.log(typeof numberValue); // "number"
console.log(numberObject instanceof Number); // true
console.log(numberValue instanceof Number); // false
let value = "25";
let number = Number(value);// 转型函数
console.log(typeof number); // "number"
let obj = new Number(value); // 构造函数
console.log(typeof obj);// "object"
const b = BigInt(Number.MAX_SAFE_INTEGER);
console.log(typeof b);// "bigint"
符号是原始值,且符号实例是唯一、不可变的。 调用 Symbol()函数时,也可以传入一个字符串参数作为对符号的描述(description),将来可以通 过这个字符串来调试代码。但是,这个字符串参数与符号定义或标识完全无关:
let genericSymbol = Symbol();
let otherGenericSymbol = Symbol();
let fooSymbol = Symbol('foo');
let otherFooSymbol = Symbol('foo');
console.log(genericSymbol == otherGenericSymbol); // false