重学前端三---JavaScript类型

377 阅读4分钟

一、JavaScript原子

1.1、语法---Grammar

  • Literal--字面值 表示数字的字面值1
  • Variable--变量
  • Keywords--ifelse关键字
  • Whitespace--空白符
  • Line Terminator--行终止符

1.2、运行时---Runtime

  • Types 类型
Number\String\Boolean\Object\Null\ Undefined\Symbol
  • Execution Context 执行上下文

二、js类型Number(Double Float--双精度浮点类型)

双精度浮点类型计算

  • Sign(1) 符号位
  • Exponent(11) 指数位
  • Fraction(52) 精度位

2.1、JavaScript 全局对象Number

2.1.1、属性

  • Number.EPSILON
   Math.abs(0.1 + 0.2 - 0.3) <= Number.EPSILON
   两个可表示(representable)数之间的最小间隔。
  • Number.MAX_SAFE_INTEGER
    是一个值为 9007199254740991的常量
    JavaScript 中最大的安全整数 (2^53 - 1)。
  • Number.MAX_VALUE
    能表示的最大正数。最小的负数是 -MAX_VALUE
  • Number.MIN_SAFE_INTEGER
    JavaScript 中最小的安全整数 (-(2^53 - 1)).
  • Number.MIN_VALUE
    约为 5e-324
  • Number.NaN
    特殊的“非数字”值
  • Number.NEGATIVE_INFINITY
    特殊的负无穷大值,在溢出时返回该值。
    -Infinity
  • Number.POSITIVE_INFINITY
    特殊的正无穷大值,在溢出时返回该值。
    Infinity

Number.prototype

    Number 对象上允许的额外属性。
    修改 Number 构造函数的原型对象会影响到所有 Number 实例。.

2.1.2、方法

  • Number.isNaN()---确定传递的值是否是 NaN。
  • Number.isFinite()---确定传递的值类型及本身是否是有限数。
  • Number.isInteger()确定传递的值类型是“number”,且是整数。
  • Number.isSafeInteger()确定传递的值是否为安全整数 ( -(253 - 1) 至 253 - 1之间)。
  • Number.parseFloat()---和全局对象 parseFloat() 一样。
  • Number.parseInt()---和全局对象 parseInt() 一样。

2.2、JavaScript 数据结构Number

ECMAScript具有两种内置的数字类型:Number和BigInt。

Number类型是双精度64位二进制格式IEEE 754值(介于-(2 53 − 1)和2 53 − 1之间的数字)。除了代表浮点数,号码类型有三个符号值:+Infinity,-Infinity,及NaN。

要检查其中的最大可用值或最小可用值±Infinity,可以使用常量Number.MAX_VALUE或Number.MIN_VALUE。

与2015年的ECMAScript开始,你还可以检查一个数是使用双精度浮点数范围Number.isSafeInteger()以及Number.MAX_SAFE_INTEGER和Number.MIN_SAFE_INTEGER。超出此范围,JavaScript中的整数将不再安全,它将成为该值的双精度浮点近似值。

> 42 / +0
Infinity
> 42 / -0
-Infinity

三、js类型string

3.1、Grammar

"abc"  'abc'   `abc`  "a'b'c" 

`ab${x}abc${y}abc`

  • `ab${
  • }abc${
  • }abc`
  • ` `

四、js类型Boolean,null、undefined

3.1、Boolean

  • true
  • false

3.2、null和undefined

  • 都表示空值
  • null 有值 关键字
  • undefined 未定义 非关键字 全局变量(早期可以赋值)
typeof null;//"object"

function f(){
    var undefined = 1;
    console.log(undefined);
}//1

function f(){
    var null = 0;
    console.log(null);
}//报错 Uncaught SyntaxError: Unexpected token 'null'

用void关键字得到undefined

五、Object

核心要素:状态,标识符,行为

  • 任何一个对象都是唯一的,这与它本身的状态无关。
  • 即使状态完全一致的两个对象,也并不相等。
  • 用状态来描述对象。
  • 状态的改变即是行为。

5.1、Class

类是一种常见的描述对象的方式。而”归类”和”分类”则是两个主要的流派。对于”归类”方法而言,多继承是非常自然的事情,如C++。而采用分类思想的计算机语言,则是单继承结构。并且会有一个基类Object。

5.2、原型

原型是一种更接近人类原始认知的描述对象的方法。我们并不试图做严谨的分类,而是采用“相似”这样的方式去描述对象。任何对象仅仅需要描述它自己与原型的区别即可。

注意:我们不应该受到语言描述的干扰。我们总是遵循“行为改变状态”的原则。

5.3、prototype

当我们找一个对象的属性时,如果自身不包含属性,那么会到原型上找,如果原型的原型不是空,还会继续往原型的原型上找,所以这样就形成一个链式的行为,即原型链。
在JavaScript运行时,原生对象的描述方式非常简单,我们只需要关心原型和属性两个部分。

六、Symbol

JavaScript属性是一个kv对。kv对,根据k找到v,k可以是两种类型,symbol和string。
JavaScript属性的值分为两种形态,第一种是数据属性,数据属性非常简单;第二种是访问器属性。

数据属性:

  • value:就是属性的值。
  • writable:决定属性能否被赋值。
  • enumerable:决定 for in 能否枚举该属性。
  • configurable:决定该属性能否被删除或者改变特征值。

访问器属: 多数是用来描述行为的,但也会同时描述状态和行为

原型机制

Object API/Grammar

  • 提供基本的对象机制,通过语法创建对象、访问属性、定义新的属性以及改变属性的特征值,这是基本的面向对象能力。
  • 基于原型的描述对象的方法,通过Object.create在指定原型的前提下创建对象,而我们又可以去修改一个对象的原型或者获取一个对象的原型,这是基于原型对象的API。
  • 基于分类的方式描述对象,在运行时会转换成JavaScript的原型相关的访问,从语法和抽象能力上看,它是基于类的面向对象的组织方式。
  • es3

凡是属于双括号的定义[[]]是对象的内置行为,在JavaScript代码中无法访问