JavaScript基本数据类型

本文系总结作业,部分参考内容在这里

在 JavaScript 规范中,共定义了6+1,七种数据类型,分为6种原始类型和对象。接下来我们分类讨论一下。

6种原始类型

1. String

String 类型用于表示由零或多个 16 位 Unicode 字符组成的字符序列,即字符串

  • JavaScript的字符串类型用于表示文本数据。在字符串中的每个元素占据了字符串的位置。第一个元素的索引为0,下一个是索引1,依此类推。字符串的长度是它的元素的数量。
  • 在JavaScript中的字符串需要使用单引号或双引号括起来,表示该值是一个字符串。
  • 字符串不可更改,但可基于原始字符串操作创建新的字符串。常用操作方法有:
    • 字符操作:charAt,charCodeAt,fromCharCode
    • 字符串提取:substr,substring ,slice
    • 位置索引:indexOf ,lastIndexOf
    • 大小写转换:toLowerCase,toUpperCase
    • 模式匹配:match,search,replace,split
    • 其他操作:concat,trim,localeCompare

2. Number

数字类型。在JavaScript里,数字类型能够代表的范围是 -(2的63次方-1) ~ (2的63次方-1) 。

  • JavaScript 提供了几个特殊数值,用于判断数字的边界和其他特性 。如下所示:
    • Number.MAX_VALUE:JavaScript 中的最大值
    • Number.MIN_VALUE:JavaScript 中的最小值
    • Number.MAX_SAFE_INTEGER:最大安全整数,为 253-1
    • Number.MIN_SAFE_INTEGER:最小安全整数,为 -(253-1)
    • Number.POSITIVE_INFINITY:对应 Infinity,代表正无穷
    • Number.NEGATIVE_INFINITY:对应 -Infinity,代表负无穷
    • Number.EPSILON:是一个极小的值,用于检测计算结果是否在误差范围内
    • Number.NaN:表示非数字,NaN与任何值都不相等,包括NaN本身
    • Infinity:表示无穷大,分 正无穷 Infinity 和 负无穷 -Infinity
  • 有 3 个函数可以把非数值转换为数值,如下:
Number(value)
parseInt(string [, radix])
parseFloat(string)

Number() 可以用于任何数据类型,而另两个函数则专门用于把字符串转换成数值。

对于字符串而言,Number() 只能对字符串进行整体转换,而 parseInt() 和parseFloat() 可以对字符串进行部分转换,即只转换第一个无效字符之前的字符。

3. Boolean

布尔类型。Boolean 类型只有两个字面值:true 和 false 。 在 JavaScript 中,所有类型的值都可以转化为与 Boolean 等价的值 。转化规则如下:

  • 所有对象都被当作 true
  • 空字符串被当作 false
  • null 和 undefined 被当作 false
  • 数字 0 和 NaN 被当作 false

4. Undefined

一个没有被赋值的变量会有个默认值undefined。它的语义是,希望表示一个变量最原始的状态,而非人为操作的结果 。 这种原始状态会在以下 4 种场景中出现:

  • 声明了一个变量,但没有赋值
var foo;
console.log(foo); //undefined
  • 访问对象上不存在的属性
console.log(Object.foo); // undefined
var arr = [];
console.log(arr[0]); // undefined

访问 Object 对象上的 foo 属性,返回 undefined , 表示Object 上不存在或者没有定义名为 foo 的属性。数组中的元素在内部也属于对象属性,访问下标就等于访问这个属性,返回 undefined ,就表示数组中不存在这个元素。

  • 函数定义了形参,但没有传递实参
// 函数定义了形参 a
function fn(a) {
    console.log(a); //undefined
}
fn(); // 未传递实参

函数 fn 定义了形参 a, 但 fn 被调用时没有传递参数,因此,fn 运行时的参数 a 就是一个原始的、未被赋值的变量。

  • 使用 void 对表达式求值
void 0 ; // undefined
void false; // undefined
void []; // undefined
void null; // undefined
void function fn(){} ; // undefined

5. Null

只有一个值:null,表示空值。
null 是原始数据类型 Null 中的唯一一个值,但 typeof 会将 null 误判为 Object 类型 。

typeof null == 'object'

在 JavaScript 中,数据类型在底层都是以二进制形式表示的,二进制的前三位为 0 会被 typeof 判定为对象类型,如下:

  • 000 - 对象,数据是对象的应用
  • 1 - 整型,数据是31位带符号整数
  • 010 - 双精度类型,数据是双精度数字
  • 100 - 字符串,数据是字符串
  • 110 - 布尔类型,数据是布尔值

而 null 值的二进制表示全是 0 ,自然前三位当然也是 000,因此,typeof 会误以为是对象类型。如果想要知道 null 的真实数据类型,可以通过下面的方式来获取:

Object.prototype.toString.call(null) ; // [object Null]

6. Symbol

符号类型,唯一且不可修改。

Symbol 是 ES6 新增的一种原始数据类型 。在 ES6 之前,对象的属性名只能是字符串,这样会导致一个问题,当通过 mixin 模式为对象注入新属性的时候,就可能会和原来的属性名产生冲突 。而在 ES6 中,Symbol 类型也可以作为对象属性名,凡是属性名是 Symbol 类型的,就都是独一无二的,可以保证不会与其他属性名产生冲突。

Object类型

javascript 中对象(物体)的概念可以比照着现实生活中实实在在的物体来理解。一个对象可以是一个单独的拥有属性和类型的实体。

ECMA262 把对象定义为:无序属性的集合,其属性可以包含基本值、对象或者函数。

对象可以通过new操作符后跟要创建的对象类型的名称来创建。

var o = new Object();

也可以直接创建一个对象。

var person = { name: 'Bob', age: 20, gender: 'male' };

你可能感兴趣的:(JavaScript基本数据类型)