[JS]类型和值

264 阅读3分钟

数字

  • JavaScript中所有数字均用浮点值来进行表示
  • 当一个数字直接出现在JavaScript程序中,我们称之为数字直接量。

整型直接量

  • 支持十进制和十六进制
  • 不完全支持八进制,请勿使用

浮点型直接量

  • JavaScript的算术运算在溢出、下溢或被零整除时不会报错。

    • 溢出 overflow:表示数字运算结果超出了JavaScript所能表示的数字上限。这时JavaScript以Infinity表示无穷大,负无穷大以-Infinity表示。
    • 下溢 underflow:表示当运算结果无限接近于零并比JavaScript所能表示的最小值还小的时候。这种情况下,JavaScript会返回0。
    • 被零整除会返回±Infinity,一种情况除外:就是0除以0,这种计算是没有意义的,故返回NaN。
  • NaN

    • 除了0/0以外,无穷大除以无穷大、给任意负数开平方根、算术运算符与不是数字或者无法转换成为数字的操作数一起使用时都将返回NaN。
    • 它和任何值都不相等,包括自身。可用x!=x表达式来判断,只有它为true。
  • JavaScript采用的是二进制表示法,可以精确表示分数,如1/2、1/8、1/1024,但是对于我们常用的十进制分数只能是一个近似表示。

    相关链接:浮点数的二进制表示

字符串

字符串是一组由16位值组成的不可变的有序序列

参考链接:Unicode与JavaScript详解

布尔值

null和undefined

  • 类型
typeof null // [object object]
typeof undefined // undefined
  • 两者都不包含任何属性或方法
  • == 为true === 为false

包装对象

这个实现细节可以解释为什么字符串、数字和布尔值不是对象,却会有属性和方法。

包装对象:存取字符串、数字和布尔值的属性时创建的临时对象称作包装对象。

JavaScript有这样一个特性:当引用了上述类型值的属性时,以字符串为例,JavaScript就会将字符串s值通过调用new String(s)的方式转换为对象,这个对象继承了字符串的方法,并被用来处理属性的引用。一旦属性引用结束,这个新创建的对象就会被销毁。

let s = 'test';
s.len = 4;
let t = s.len;
t; // undefined

包装对象与原始值的异同:

  • 包装对象类型是object 而原始值为自身的类型
  • == 为true === 为false

原始值与引用对象

原始值

  • 原始值(undefined、null、布尔值、数字和字符串)是不可更改的。字符串的所有操作实际上是返回一个新的字符串值。
let s = "hello";
s.toUpperCase(); // 'HELLO'
s; // 'hello'
  • 原始值的比较是值的比较,只有在他们的值相等时他们才相等

引用类型

  • 这里包括对象、数组和函数
  • 引用类型是可变的
  • 引用类型的比较是基于引用的比较,只有在他们引用同一个基对象时,他们才相等。

类型转换

以下表格说明了在JavaScript中将如何做类型转换

有几点需要注意一下:

  • 原始值 => 对象:通过调用String()、Number()、Boolean()构造函数,转换为它们各自的包装对象
  • null和undefined属于例外,当将他们用在期望是一个对象的地方都会造成一个类型错误

类型转换