《JavaScript权威指南》第3章 类型、值和变量

90 阅读4分钟
  1. 计算机程序通过操作值或文本来工作。编程语言中这些可以表示和操作的值被称为类型,一门语言支持的类型集也是这门语言最基本的特征。
  2. JS类型分为两类:原始类型和对象类型。原始类型是不可修改的,JS的对象类型是可修改的。对象可被称为引用类型,当两个对象值引用同一个底层对象时才是相等的。
  3. 原始类型包括数值文本字符串(也称为字符串)和布尔真值(也称为布尔值)。
  4. JS中的特殊值nullundefined是原始值,这两个值被认为是各自特殊类型的唯一成员。
  5. ES6新增的Symbol(符号),用于对语言进行扩展而不破坏向后兼容性。
  6. 对象(也就是对象类型的成员)是属性的集合。
  7. 数组表示一个数字值的有序集合。
  8. Set表示一组值的集合。
  9. Map表示键与值的映射。
  10. 定型数组类型包括了RegExpDateError及其子类型表示JS代码运行期间可能发生的错误。
  11. JS和静态语言的差别之一在于:函数和类不仅仅是语言的语法,它们本身就是可以被JS程序操作的值。
  12. 在内存管理方面,JS解释器会执行自动垃圾收集
  13. 需要留意,不能让某些值在不经意间存续过长时间后仍可触达,从而导致他们无法被回收
  14. 面向对象的操作风格是指不用定义全局函数去操作不同类型的值,而是由这些类型本身定义操作值的方法。比如使用a.sort()而不是sort(a)
  15. JS中只有nullundefined是不能调用方法的值。
  16. JS使用 IEEE 754标准定义的64位浮点格式表示数值,可以准确表示(-2^53-2^53)之间的所有整数。IEEE-754是二进制表示法,无法精确的表示0.1等十进制分数。解决浮点近似值可以考虑等量整数。
  17. JS支持十六进制,十六进制字面量以0x0X开头。ES6支持二进制和八进制,二进制以0b0B开头,八进制以0o0O开头。
  18. 上溢出会给出无穷值Infinity或负无穷值-Infinity,下溢出发生在数值操作的结果比最小可表示数值更接近0的情况,此时会返回0或-0,除了作为除数使用外,无法区分0或-0。
  19. 0除以0会返回NaN(Not a Number,非数值),非数值与任何数比较都不相等,也不等于自己,只能通过 x!=xNumber.isNaN(x) 返回true判断。
  20. JS不允许在使用算数操作符时,混用BigInt操作数和常规数值操作数。Math对象的任何函数不接收BigInt操作数。
  21. Date类的时间戳为1970年1月1日起至今的毫秒数。
  22. ES6中,字符串字面量可以使用反引号来定界,中间可以运行JS表达式。
  23. nullundefined的区别:null是一个语言关键字,一种特殊的对象,表示“没有对象”,undefined表示一种更深层次的不存在,是一个预定义的全局变量。
  24. 符号(Symbol)可以作为对象的属性名,获取Symbol值需要调用Symbol()函数,这个函数永远不会返回相同的值,即使每次传入的参数都一样,可以安全地用于为对象添加新属性,不用担心重写已有的同名属性。
  25. 以相同的字符串调用Symbol.for()始终返回相同的值。
  26. ES2020定义了globalThis作为在任何上下文中引用全局对象的标准方式。
  27. ES6可以使用Array.from()复制数组。
  28. 布尔值在比较前会转换为数值,if语句将undefined转换为false==操作符不会将操作数转换为布尔值。
  29. 格式化与解析数值是计算机程序最常见的错误来源。
  30. 声明变量的同时为其赋予一个初始值是个好的编程习惯。
  31. 通过var声明的全局变量被实现为全局对象的属性,通过letconst声明的全局变量和常量不是全局对象的属性。
  32. 属性名一定是在冒号左侧,不论是在对象字面量中,还是在对象解构赋值的左侧。