Null 类型 只有一个值 null
Undefined 类型 只有一个值 undefined ,undefined 表示值缺失, null 表示对象缺失
Boolean 类型有 2 个值,true 和 false
let xxx = 1
新建 number (创出来的是 number 原始值)let xxx = new Number(1)
函数创建(创出来的是 number 对象,MMDN 官方建议尽量不要这样用)let a = 1
let b = new Number(1)
console.log(typeof a, a); // number 1
console.log(typeof b, b); // object Number {1}
2的-1074次方
(Number.MIN_VALUE)和 2的1024次方
(Number.MAX_VALUE)之间的正浮点数-2的-1074次方
(Number.MIN_VALUE)和 -2的1024次方
(Number.MAX_VALUE)之间的负浮点数-(2的53次方 − 1)
(Number.MIN_SAFE_INTEGER)到 2的53次方 − 1
(Number.MAX_SAFE_INTEGER)范围内的整数检查数字是否在安全范围方法 Number.isSafeInteger(x)
NaN
是运算结果不表示数字时的结果,也是 js 中唯一不等于自身的值
n
附加在整数末尾BigInt()
const x = 9999999999999n;
const y = BigInt(9999999999999);
console.log(x == y); // 结果为 true
const x = 99999999999.99n
console.log(x) // 结果为报错 Uncaught SyntaxError: Invalid or unexpected token
const x = 4n;
const y = 3n;
console.log(x / y); // 结果是 1n 而不是 1.3333333333333
const x = 1n; // BigInt 类型的数值 1
const y = 1; // Number 类型的数值 1
console.log(x === y); // 结果为 false
console.log(x == y); // 结果为 true
const mixed = [4n, 6, -12n, 10, 4, 0, 0n];
// ↪ [4n, 6, -12n, 10, 4, 0, 0n]
mixed.sort();
// ↪ [-12n, 0, 0n, 10, 4n, 4, 6]
const x = Object(0n);
const y = Object(0n);
console.log(x === y); // false
const x = BigInt(1);
console.log(JSON.stringify(x)); // Uncaught TypeError: Do not know how to serialize a BigInt
// 先定义 toJSON 方法
BigInt.prototype.toJSON = function () {
return this.toString();
};
// 使用定义的 toJSON 方法进行序列化
const y = BigInt(1);
console.log(y.toJSON()); // 1
2的1024次方
时使用''
或 ""
新建字符串(创出来的是字符串原始值)new String()
函数创建(创出来的是字符串对象,MMDN 官方建议尽量不要这样用)const s1 = "2 + 2";
const s2 = new String("2 + 2");
const s3 = s2.valueOf(); // String 对象始终可以使用 valueOf() 方法将其转换为对应的原始值
console.log(s1); // 结果 2 + 2
console.log(s2); // 结果 String {'2 + 2'}
console.log(s3); // 结果 2 + 2
const a = "a";
const b = "b";
console.log(a < b); // 结果 true 即 "a" < "b"
const a = "a";
const A = "A";
console.log(a < A); // 结果 false 即同字母,小写 > 大写
const s1 = "hello world!";
console.log(s1[6]); // 结果为 w ,空格也占据下标
const symbol1 = Symbol();
console.log(typeof symbol1); // 结果 symbol
const symbol2 = Symbol(42);
console.log(symbol2); // 结果 Symbol(42)
const symbol3 = Symbol(42);
console.log(symbol3 === 42); // 结果 false,不可修改
const symbol4 = Symbol("foo");
console.log(
typeof symbol4.toString(),
symbol4.toString(),
typeof symbol4,
symbol4
); // 结果 string Symbol(foo) symbol Symbol(foo)
const symbol5 = Symbol("foo");
const symbol6 = Symbol("foo");
console.log(symbol5 === symbol6); // 结果 false
console.log(typeof undefined); // undefined
console.log(typeof 2); // number
console.log(typeof true); // boolean
console.log(typeof "str"); // string
console.log(typeof Symbol("foo")); // symbol
console.log(typeof 2172141653n); // bigint
console.log(typeof function () {}); // function
// 不能判别
console.log(typeof []); // object
console.log(typeof {}); // object
console.log(typeof null); // object
instanceof 运行机制是 判断在其原型链中能否找到该类型的原型
class People {}
class Student extends People {}
const vortesnail = new Student();
console.log(vortesnail instanceof People); // true
console.log(vortesnail instanceof Student); // true
Object.prototype.toString.call(2); // "[object Number]"
Object.prototype.toString.call(""); // "[object String]"
Object.prototype.toString.call(true); // "[object Boolean]"
Object.prototype.toString.call(undefined); // "[object Undefined]"
Object.prototype.toString.call(null); // "[object Null]"
Object.prototype.toString.call(Math); // "[object Math]"
Object.prototype.toString.call({}); // "[object Object]"
Object.prototype.toString.call([]); // "[object Array]"
Object.prototype.toString.call(function () {}); // "[object Function]"
如何判断一个变量为数组
const arr = ["111", "sss1", "**", 12, { name: "tom" }, [12, "a1"]];
// 1. Array.isArray() 函数
Array.isArray(arr); // true
// 2. __ proto__属性 判断
arr.__proto__ === Array.prototype; // true
// 3. instanceof 查找继承
arr instanceof Array; // true
// 4. Object.prototype.toString.call() 判断
Object.prototype.toString.call(arr); // "[object Array]"