充电计划 -- JavaScript内置类型


注意:当前博客根据ECMAScript 6版本进行学习。

数据类型与数据结构

参考网址:JavaScript数据类型与数据结构

动态类型

JavaScript是一种弱类型/动态语言,不用提前声明变量的类型。在程序运行过程中,类型会被自动确定。

var foo = 42;    // foo is a Number now
foo = "bar"; // foo is a String now
foo = true;  // foo is a Boolean now

数据类型

截止至今,ECMAScript标准定义了9种数据类型

  • 原始类型
    • undefined:typeof instance === "undefined"
    • Boolean:typeof instance === "boolean"
    • Number:typeof instance === "number"
    • String:typeof instance === "string“
    • BigInt:typeof instance === "bigint"
    • Symbol :typeof instance === “symbol”
  • null
    • null:typeof instance === "object"
  • Object
    • object:typeof instance === "object"
      任何 constructed 对象实例的特殊非数据结构类型,也用做数据结构:new Object,new Array,new Map,new Set,new WeakMap,new WeakSet,new Date,和几乎所有通过 new keyword 创建的东西。
  • Function
    • Function:typeof instance === "function"
      非数据结构,每个 Function 构造器都由 Object 构造器派生

原始值

除 Object 以外的所有类型都是不可变的(值本身无法被改变)。

  • 布尔类型:布尔表示一个逻辑实体,可以有两个值:true 和 false。
  • Null 类型:Null 类型只有一个值: null。
  • Undefined类型:一个没有被赋值的变量会有默认值undefined。
  • 数字类型:根据 ECMAScript 标准,JavaScript 中只有一种数字类型:基于 IEEE 754 标准的双精度 64 位二进制格式的值(-(2(53) -1) 到 2(53) -1)。它并没有为整数给出一种特定的类型。除了能够表示浮点数外,还有一些带符号的值:+Infinity,-Infinity 和 NaN (非数值,Not-a-Number)。
  • BigInt类型:BigInt类型是 JavaScript 中的一个基础的数值类型,可以用任意精度表示整数。使用 BigInt,您可以安全地存储和操作大整数,甚至可以超过数字的安全整数限制。BigInt是通过在整数末尾附加 n 或调用构造函数来创建的。
  • 字符串类型:JavaScript的字符串类型用于表示文本数据。它是一组16位的无符号整数值的“元素”。
  • 符号类型:符号(Symbols)是ECMAScript 第6版新定义的。符号类型是唯一的并且是不可修改的, 并且也可以用来作为Object的key的值。

注意:JavaScript的字符串是不可更改的。

对象

在计算机科学中,对象值内存中可以被标识符引用的一块区域

属性

  • 在 Javascript 里,对象可以被看作是一组属性的集合。用对象字面量语法来定义一个对象时,会自动初始化一组属性。
  • ECMAScript定义的对象中有两种属性:数据属性和访问器属性。
数据属性

数据属性是键值对,并且每个数据属性拥有下列特性:
数据属性的特征

访问器属性

访问器属性有一个或两个访问器函数 (get 和 set) 来存取数值,并且有以下特性:
一个访问器属性的特征
注意:这些特性只有 JavaScript 引擎才用到,因此你不能直接访问它们。所以特性被放在两对方括号中,而不是一对。

“标准”对象和函数

JavaScript对象是键值之间的映射。

  • 键:一个字符串(或Symbol)
  • 值:任意类型的值
    函数时一个福袋可悲调用功能的常规对象
内建对象
  • 日期
  • 数组(有序集):一种使用整数作为键(integer-key-ed)属性和长度(length)属性之间关联的常规对象
  • 类型数组(有序集):提供了一个基本的二进制数据缓冲区的类数组视图
    部分TypeArray类型
  • Maps/WeakMap(键控集):把一个值和对象关联起来,区别在于maps的键是可枚举的,允许垃圾收集器优化后面的枚举。
  • Sets/WeakSets(键控集):表示一组对象
  • JSON(结构化数据):一种轻量级的数据交换格式
  • JavaScript标准库…

typeof

原理

不同的对象在底层都表示为二进制,
在 JavaScript 中二进制前三位都为 0 的话会被判断为 object 类型, null 的二进制表示是全 0, 自然前三位也是 0, 所以执行 typeof 时会返回“object”。

注意:

  • javascript 中的 null:既是对象,又不是对象
typeof null === 'object';
null instanceof Object === false
null instanceof null // Uncaught TypeError: Right-hand side of 'instanceof' is not an object

JavaScript的最初版本中,使用的32位系统,低位存储的变量类型信息:

  • 000:对象
  • 1:整数
  • 010:浮点数
  • 100:字符串
  • 110:布尔
  • undefined:用 - (−2^30)表示。
  • null:对应机器码的 NULL 指针,一般是全零。

安全防范机制

var a; // a为undefined,b为undeclared
typeof a; // 'underfined'
typeof b; // 'underfined'

JavaScript的类型、值、类型转换

JavaScript类型

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值