数据类型

8种数据类型(7种原始数据类型、1种复杂数据类型)

Number:代表数字,可以是整数或小数。 String:代表文本,可以使用单引号、双引号或反引号括起来。 Boolean:代表布尔值,只有两个可能的值,即 true 和 false。 Null:代表空值,表示一个变量没有值。 Undefined:代表未定义的值,表示一个变量没有被赋值。 Symbol:代表唯一的标识符,用于对象属性的键。 BigInt: 表示任意大小的整数

Object: 是一种无序名值对的集合 (复杂数据类型)

typeof

typeof 操作符会返回下列字符串之一:

  • "undefined"表示值未定义;

  • "boolean"表示值为布尔值;

  • "string"表示值为字符串;

  • "number"表示值为数值;

  • "object"表示值为对象(而不是函数)或 null;

  • "function"表示值为函数;

  • "symbol"表示值为符号。

valueOf vs toString()

如果数据类型是字符串,先调用 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类型

符号是原始值,且符号实例是唯一、不可变的。 调用 Symbol()函数时,也可以传入一个字符串参数作为对符号的描述(description),将来可以通 过这个字符串来调试代码。但是,这个字符串参数与符号定义或标识完全无关:

let genericSymbol = Symbol();
let otherGenericSymbol = Symbol();
let fooSymbol = Symbol('foo');
let otherFooSymbol = Symbol('foo');
console.log(genericSymbol == otherGenericSymbol);  // false

Last updated