global 对象是作为 window 对象的一部分实现的,我们无法通过代码访问到 global 对象。
我们平时在全局环境下定义的内容(变量,函数,常量等等)都是作为 global 对象的属性存在的(都属于 global 对象)。
typeof:检查数据类型是什么
变量在存储原始类型的数据时,直接将数据存储到变量的内容空间中。
当我们将存储原始数据的变量赋值给另一个变量时,其实是将变量存储的数据复制了一份保存到了另一个变量的内存空间中。
因为每个变量都是使用自己独立的存储空间保存原始类型的数据,因此我们改变其中一个变量空间中的数据时,不会影响到另一个变量。
- Boolean
- Number
- String
- Null
- Undefined
- Symbol
- // ES6新增的类型Object
虽然字符串,数字,布尔值是原始数据类型,但是也有很多方法可以使用(null和undefined没有方法)。例如:
var str = 'Hello world';
var lowercaseStr = str.toLowerCase(); // 转换成小写形式
var firstLetter = str.charAt(0); // 获取第一个字符
var subString = str.substring(2, 4); // 获取2-4的字符
var splitStr = str.split('o'); // 将字符串以指定的分隔符分割成数组
var count = 10;
var fixedCount = count.toFixed(2); // 转换成 10.00
var hexCount = count.toString(16); // 转换成 'a'
var flag = true;
var stringFlag = flag.toString(); // 转换成 'true'
引用类型
引用类型的数据稍微复杂一点,指的是JS中的对象,类似于其他编程语言中的类。对象是由一系列的键值对(属性名和属性值)组成的无序列表。ECMAScript给我们提供了如下几种内置对象:
- Object
- Array
- Date
- RegExp(regular expression)
- Function
- Error
- String
- Number
- Boolean
检测引用类型的数据
使用typeof检测引用类型时,除了Function以外,其他的引用类型都不能被正确的识别。这个时候我们可以使用instanceof来检测它们。
instanceof操作符需要一个对象的实例和对象的构造函数作为参数,如果实例是使用该构造函数创建话,返回true,否则返回false:
原始包装器类型
JavaScript中最让疑惑的可能就是原始包装器类型。JavaScript给我们提供了 3 种包装器类型(String,Number,Boolean)。
原始包装器类型也是引用类型,当字符串,数字或布尔值被读取的时候,原始包装器类型会自动在后台创建。例如:
var name = 'zhangsan';
var firstChar = name.charAt(0);
console.log(firstChar);
后台为我们做了什么呢?
var name = 'zhangsan';
var temp = new String(name);
var firstChar = temp.charAt(0);
console.log(firstChar);
temp = null;
String类型的对象只存在于调用方法(charAt方法)的那一刻,随后就被销毁了(这一过被称为 自动装箱)。