美文网首页JavaScript 基础专题
ECMAScript 之数据类型

ECMAScript 之数据类型

作者: Jeuin | 来源:发表于2020-11-20 09:42 被阅读0次

概述

计算机程序 = 数据结构 + 算法

计算机程序的运行需要对数据进行操作,能够表示操作的值(Literals)的类型(Types) 称为数据类型。

ES3 定义了 6 种语言类型,其中包括 5 种原始数据类型1 种引用数据类型

  • 原始数据类型:Undefined、Null、Boolean、String、Number
  • 引用数据类型:Object

Undefined

Undefined 类型表示 “未定义”。它仅有一个值 undefined,并且该值不是 JavaScript 的关键字和保留字,它是一个合法的标识符。

Null

Null 类型表示“空值”,它只有一个值 nullnull 是 JavaScript 的关键字,不能作为标识符使用。

Boolean

Boolean 类型表示一个逻辑实体,它仅有两个值 truefalse

String

字符串是由零个或多个 Unicode 字符(UTF-16)组成的有限有序序列的集合,最大长度为2^53-1

字符串中每个字符被认为在序列中占据一个位置(索引),这些位置用非负整数表示,索引从 0 开始,依此类推。

字符串的长度就是其中的字符数;空字符串不包含任何字符,因此长度为零。

字符串可以当作只读数组,通过索引访问 'hello'[0]

Number

Number 类型使用 IEEE 754 标准来表示整数(32bit-4byte)和浮点数值(64bit-8byte)。

有限大小,其中一半是正数,一半是负数;对于每个有限正数,都有一个相应的负数具有相同的大小。

特殊的数值

NaN

NaN(Not-a-Number) 表示非数值,这个数值用于表示执行一些不合法的数学运算失败后返回的结果,此时不会抛出异常,例如 0/01/"xxx"

任何涉及 NaN 的操作(如 NaN/10)都会返回 NaN。

NaN 与任何值都不相等,包括 NaN 本身

console.log(NaN == NaN) // false
console.log(NaN/10) // NaN
console.log(0/0) // NaN

Infinity

Infinity 表示无穷大,分为正无穷和负无穷。正数除以 0 返回 Infinity,负数除以 0 返回 -Infinity。

console.log(1/0) // Infinity
console.log(-1/0) // -Infinity

+0/-0

JavaScript 中存在正零(+0)和负零(-0)两个数值,且正零和负零是严格相等的

console.log(+0 == -0) // true
console.log(+0 === -0) // true

Object

对象是由一组零个或多个属性(properties)组成的无序集合。

每个属性都包含以下内容:

  • 一个名称:属性名称可以是 String 值或 Symbol 值(ES6)。
  • 一个值:属性值可以是任何数据类型值。
  • 一组属性(attributes):每个 properties 具有 0 个或多个特征(attributes)描述属性,这些特征决定了如何使用每个属性。

属性是包含其他数据类型值的容器

var boy = {
    // 属性:表示对象的基础数据
    name: 'sgl',
    age: '25',
    // 属性:表示对象具备的功能
    loveMe: function() {
        console.log('love me very much')
    }
}

属性的特征属性

image
  • ReadOnly: 只读属性。为 true 时,该属性不允许修改,任何执行 JS 代码试图修改该属性值的行为都是无效的。
  • DontEnum:不能枚举。为 true 时,该属性不会出现在 for-in 枚举中。
  • DontDelete:不能删除。为 true 时,该属性不允许删除,尝试删除属性的操作将会被忽略。
  • Internal: 内部属性,在 JS 程序中无法访问,用来实现 JS 语法的内部逻辑。

内部属性

image
  • [[Prototype]]:指向当前对象的原型
  • [[Class]]:当前对象的类型,调用Object.prototype.toString 方法,返回的就是内部属性 [[Class]] 的值
  • [[Value]]:对象的值
  • [[Get]]:当读取属性值时,内部调用的就是该方法,获取指定属性的值。会遍历原型链查找
  • [[Put]]:当设置属性值时,内部调用的就是该方法,设置指定属性的值。首先判断 [[CanPut]] ,如果为 false,则不允许修改。否则执行修改操作,无指定属性时,执行创建属性并赋值操作。
  • [[CanPut]]:判断属性是否可以进行 [[Put]] 操作。会判断 ReadOnly 特征属性的值。
  • [[HasProperty]]:判断对象是否存在指定属性。会遍历原型链查找
  • [[Delete]]:通过 delete 操作符删除对象指定属性,内部调用的就是该方法,删除操作执行前,会获取 DontDelete 特征属性的值,判断是否允许删除。
  • [[DefaultValue]]:获取对象的默认值方法,默认值为一个原始值。算法如下:
    String/Date 类型:会首先调用 toString 方法,判断是否返回原始值,如果不能返回,再调用 valueOf方法。如果都不能返回原始值,则抛出运行时错误。
    Number 与 其他 Object 类型:会首先调用 valueOf 方法,判断是否返回原始值,如果不能返回,再调用toString 方法。如果都不能返回原始值,则抛出运行时错误。
  • [[Construct]]:指向对象的构造器
  • [[Call]]:当调用函数时,内部执行的就是该方法。函数必须具有该内部属性。
  • [[HasInstance]]:判断当前对象是否存在指定实例
  • [[Scope]]:作用域链
  • [[Match]]:测试正则表达式是否匹配并返回MatchResult值

相关文章

网友评论

    本文标题:ECMAScript 之数据类型

    本文链接:https://www.haomeiwen.com/subject/halliktx.html