在 JavaScript 中,类型是非常重要的概念。了解类型的概念和类型转换的机制能够帮助我们更好地理解和掌握 JavaScript 这门语言。在 ES12 中,类型和类型转换方面有了一些新的特性,本文将为大家介绍。
类型
在 JavaScript 中,类型分为基本类型和引用类型。基本类型包括:数字(Number)、字符串(String)、布尔(Boolean)、空(Null)、未定义(Undefined)和符号(Symbol)。引用类型包括:对象(Object)、数组(Array)、函数(Function)等。
typeof 运算符
typeof 运算符可以用来判断一个值的类型,返回一个字符串。
// javascriptcn.com 代码示例 typeof 123; // "number" typeof "hello"; // "string" typeof true; // "boolean" typeof null; // "object" typeof undefined; // "undefined" typeof Symbol("foo"); // "symbol" typeof {name: "张三"}; // "object" typeof [1, 2, 3]; // "object" typeof function(){}; // "function"
需要注意的是,typeof null 返回的是 "object",这是一个历史遗留问题。因为在 JavaScript 的早期版本中,null 被错误地认为是一个对象,而实际上它是一个基本类型。
instanceof 运算符
instanceof 运算符可以用来判断一个对象是否属于某个类。
function Person(name) { this.name = name; } var p = new Person("张三"); p instanceof Person; // true
需要注意的是,instanceof 运算符判断的是对象的原型链,而不是对象本身的类型。
类型转换
在 JavaScript 中,类型转换是非常常见的操作。例如,将一个字符串转换为数字,将一个数字转换为字符串等。JavaScript 中的类型转换分为两种:显式类型转换和隐式类型转换。
显式类型转换
显式类型转换是开发者主动进行的类型转换操作,例如使用 Number()、String()、Boolean() 等函数将一个值转换为指定的类型。
Number("123"); // 123 String(123); // "123" Boolean(0); // false
需要注意的是,使用 Number() 函数将一个字符串转换为数字时,如果字符串中包含非数字字符,将返回 NaN。
Number("hello"); // NaN
隐式类型转换
隐式类型转换是 JavaScript 引擎自动进行的类型转换操作,例如将一个字符串和一个数字相加时,JavaScript 引擎会将数字转换为字符串,然后进行字符串拼接。
"hello" + 123; // "hello123"
需要注意的是,隐式类型转换可能会造成一些意想不到的结果,例如:
"5" + 5; // "55" "5" - 5; // 0
在 ES12 中,引入了一些新的类型转换特性,例如:BigInt()、String.raw() 等。
BigInt
BigInt 是 ES12 新增的一种基本类型,用于表示任意精度的整数。在 JavaScript 中,普通的数字类型(Number)只能表示 2 的 53 次方以内的整数,而 BigInt 可以表示任意大小的整数。
const a = 123456789012345678901234567890n; const b = 987654321098765432109876543210n; a + b; // 1111111111111111111111111111111n
需要注意的是,BigInt 类型不能和普通的数字类型进行运算,必须使用 BigInt() 函数将普通的数字转换为 BigInt 类型。
String.raw
String.raw() 函数可以返回一个模板字符串的原始字符串。
const str = String.raw`hello\nworld`; console.log(str); // "hello\\nworld"
需要注意的是,String.raw() 函数返回的字符串中,反斜杠不会被转义。如果需要转义,可以使用双反斜杠。
总结
了解类型和类型转换是掌握 JavaScript 的关键之一。在 ES12 中,类型和类型转换方面有了一些新的特性,需要我们不断学习和掌握。希望本文能够对大家有所帮助。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6586418ed2f5e1655d0a2641