JavaScript语言标准内置对象

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects

值属性

这些全局属性返回一个简单值,这些值没有自己的属性和方法。

  • Infinity
  • NaN
  • undefined
  • null字面量
  • golobalThis

函数属性

全局函数可以直接调用,不需要在调用时指定所属对象,执行结束后会将结果直接返回给调用者。

  • eval()
  • isFinite()
  • isNaN
  • parseFloat()
  • parseInt()
  • decodeURI()
  • decodeURIComponent()
  • encodeURI
  • encodeURIComponent()
  • uneval()
  • escape()
  • unescape()

基本对象

顾名思义,基本对象是定义或使用其他对象的基础。基本对象包括一般对象、函数对象和错误对象。

  • Object
  • Function
  • Boolean
  • Symbol
  • Error
  • EvalError
  • RangeError
  • ReferfnceError
  • SyntaxError
  • TypeErrpr
  • URIError

数字和日期对象

用来表示数字、日期和执行数学计算的对象。

  • Number
  • BigInt
  • Math
  • Date

字符串

用来表示和操作字符串的对象。

  • String
  • RegExp

可索引的集合对象

这些对象表示按照索引值来排序的数据集合,包括数组和类型数组,以及类数组结构的对象

  • Array
  • Int8Array
  • Uint8Array
  • Uint8ClampedArray
  • Int16Array
  • Uint16Array
  • Int32Array
  • Uint32Array
  • Float32Array
  • Float64Array
  • BigInt64Array
  • BigUint64Array

使用键的集合对象

这些集合对象在存储数据时会使用到键,支持按照插入顺序来迭代元素

  • Map
  • Set
  • WeakMap
  • WeakSet

结构化数据

这些对象用来表示和操作结构化的缓冲数据,或使用JSON编码的数据

  • ArrayBuffer
  • DataView
  • JSON
  • sharedArrayBuffer
  • Atomics

控制抽象对象

  • Promise
  • Generator
  • GeneratorFunction
  • AsyncFunction

反射

  • Reflect
  • Proxy

国际化

为了支持多语言加入的ECMAScript对象

  • Intl
  • Intl.Collator
  • Intl.DateTimeFormat
  • Intl.ListFormat
  • Intl.NumberFormat
  • Intl.PluralRules
  • Intl.RelativeTimeFormat
  • Intl.Locale

WebAssembly

对象扩展

  • 属性简洁表示法
  • 属性名表达式:
    • 定义对象属性的两种方法obj.foo=true,obj['a'+'bc']=123
    • es5使用字面量方式定义对象只能使用标识符定义属性,es6允许字面量定义对象时用方法二
    • 属性名表达式与简介表示法不能同时使用,否则报错。
  • 对象方法的name属性返回函数名
  • Object.is():弥补了NaN不等于自身,+0等于-0,Object.is用来比较两个值严格相等,与相等运算符===的行为基本一致,但NaN等于自身+0不等于-0。
  • Object.assign(targer,source):返回目标对象
    • 为对象添加属性
    • 为对象添加方法
    • 克隆对象
    • 合并多个对象
    • 为属性指定默认值
  • 属性的可枚举性
    • for inObject.keys()JSON.Stringfy()Object.assign(),都会忽略不可以枚举的属性,只有for in会返回继承的属性
    • 所有class的原型的方法都是不可枚举的。
    • 只关心自身属性的话使用Objec.keys()替代for in
  • 属性的遍历
    • es6一共有5种方法可以遍历对象的属性
    • for in:自身和继承的可枚举属性
    • Object.keys(obj):自身的所有可枚举属性
    • Object.getOwnPropertyNames(obj):包含对象自身的所有属性,包含不可枚举属性
    • Object.getOwnPropertySymbols(obj):包含对象自身的所有Symbol属性
    • Reflect.ownKeys(obj):返回一个数组,包含对象自身的所有属性,包含不可枚举和Symbol
    • 遍历顺序:数值按照数字排序,字符串按照生成时间排序,symbol值的属性,按照生成时间排序。
  • proto属性:
    • proto是内部属性,只有浏览器部署了这个属性,所以要使用Object.getPrototypeOf(),Object.setPrototypeOf(),Object.create()
    • Object.setPrototypeOf():第一个参数不是对象会转为对象,是undefined或null报错
    • Object.getPrototypeOf():第一个参数不是对象会转为对象,是undefined或null报错
  • Object遍历
    • Object.keys():返回对象自身的所有可以遍历的键名,不是对象先转为对象,null,undefined报错
    • Object.values():返回对象自身的所有可以遍历的键值,同上,字符串会返回字符数组,数值布尔返回空对象。
    • Object.entries:返回对象自身的所有可以遍历的键值对数组,基本用途是遍历对象的属性,另一个用处是将对象转化为真正的Map结构
  • 对象的扩展运算符

    • 解构赋值:注意复制是浅复制,且必须要放在最后

      1. let{x,y,...z}={x:1,y:2,a:3,b:4}
      2. //x:1 y:2 z:{a:3,b:4}
    • 扩展运算符(…):let a={...origion}等同于let a=Object.assign({},origin)

  • Object.getOwnPropertyDescriptors()
  • Null传导运算符 ``` const firstName=(message &&message.body &&message.body.user &&message.body.usr.firstName)||’default’

const firstName=message?.body?.user?.firstName||’default’; ```