欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

你不知道的JS中篇(一)类型

程序员文章站 2022-07-14 14:25:52
...

你不知道的JS(一)类型

本系列第一篇,目标是系统的过一遍你不知道的JS系列(分上、中、下三部分)

1.1 类型

撇开学术界对类型定义的分歧,为什么说 JavaScript 是否有类型也很重要呢?

要正确合理地进行类型转换,我们必须掌握 JavaScript 中的各个类型及其内在行为。几乎所有的 JavaScript 程序都会涉及某种形式的强制类型转换,处理这些情况时我们需要有充分的把握和自信。

如果要将 42 作为 string 来处理,比如获得其中第二个字符 “2”,就需要将它从 number (强制类型)转换为 string。

这看似简单,但是强制类型转换形式多样。有些方式简明易懂,也很安全,然而稍不留 神,就会出现意想不到的结果。

全面掌握 JavaScript 的类型之后,我们旨在改变对强制类型转换的成见,看到它的好处并 且意识到它的缺点被过分夸大了。现在先让我们来深入了解一下值和类型。

1.2 内置类型

JavaScript 有七种内置类型:

  • 空值(null)
  • 未定义(undefined)
  • 布尔值( boolean)
  • 数字(number)
  • 字符串(string)
  • 对象(object)
  • 符号(symbol,ES6 中新增)

最基础的检测方式就是通过 typeof运算符来查看值的类型,它返回的是类型的字符串值。但请注意!!!,它也不是万能的

typeof undefined  === 'undefined'; // true
typeof true === 'boolean'; // true
typeof 42 === 'number'; // true
typeof "42" === 'string'; // true
typeof { life: 42 }  === "object"; // true
// ES6中新加入的类型
typeof Symbol() === "symbol"; // true

以上的检测结果都是正确的,但是对 null 检测时

typeof null === "object"; // true

而对数组的检测也是如此

typeof [1,2,3] === "object"; // true

我们在这里来一句总结,数组可以被称为 object 的一个 “子类型”,null可以被称为空对象。

1.3 值和类型

JavaScript 中的变量是没有类型的,只有值才有。变量可以随时持有任何类型的值。

换个角度来理解就是,JavaScript 不做“类型强制”;也就是说,语言引擎不要求变量总是持有与其初始值同类型的值。一个变量可以现在被赋值为字符串类型值,随后又被赋值为 数字类型值。

1.3.1 undefined和undeclared

变量在未持有值的时候为 undefined。此时 typeof 返回 “undefined”:

var a;
typeof a; // "undefined"
var b = 42;
var c;

已在作用域中声明但还没有赋值的变量,是 undefined 的。相反,还没有在作用域中声明过的变量,是 undeclared 的。

var a;
a; // undefined
b; // ReferenceError: b is not defined

1.3.2 typeof Undeclared

该安全防范机制对在浏览器中运行的 JavaScript 代码来说还是很有帮助的,因为多个脚本 文件会在共享的全局命名空间中加载变量。