JS 拾遗(二)

重读阮一峰 《JavaScript 标准参考教程》一书。有沧海拾遗的感觉,偶有收获,记录下来,以便之后查阅…

JS语法

变量提升

  1. 只有用var声明变量才会变量提升
  2. 要规避这种特性,可以直接写a = 0,或者用 winsow.a = 0 这种形式
  3. function关键字声明的函数会将整个函数提升到顶部,用 var foo = function () {} 可以只提升foo变量的声明,但函数体还是会留在原地,这样可以避免一些错误

switch-case语法

  1. 每一个case语句后面都要加break,不然程序还是会往下走
  2. switch-case语法使用的是严格相等的模式

数组

  1. 数组即对象,不过是拥有有序的键名(‘0’,’1’,…)
  2. 本质上,数组的下标是字符串。只不过我们写成数字下标时,JS解析器会对数字进行隐式转换
  3. 数组与狭义对象的差别之一是数组的length属性是动态变化的。清空数组的一种方式是arr.length = 0
  4. 给数组添加一些不符合数组规范的属性不会影响它的length属性
  5. 类数组对象也有length属性,但是该属性不是动态的

强制类型转换

  1. Number()是比parseInt()更加严格的转换
  2. String()可以用来区分狭义对象和数组
  3. Boolean()

错误处理

  1. error对象使用new Error()构造函数,并传入错误信息message
  2. 三个属性:name、message、stack
  3. throw用于中断程序执行,抛出意外或错误。接收表达式作为参数,可以抛出各种类型的值

闭包

  1. 作用:①外部读内部的变量 ②闭包的变量不会被回收,可以用来存储变量 ③封装对象的私有属性和方法
  2. 外部函数的内部环境会一直存在,闭包可以看作是函数内部作用域的一个接口
  3. 外部函数每一次执行都会形成新的闭包,该闭包又保留外层函数的内部变量,所以内存消耗挺大,要慎用

IIFE

  1. function关键字既可以作为语句,也可以作为表达式
  2. ()()是为了让JS解释器将function解析成表达式,后面的小括号是用来传参的。
  3. 还有其他形式的如:(function(){}())、~function(){}()...

狭义对象

  1. 对象的键名为字符串。我们用对象字面量的方式定义对象,键名可以省略引号
  2. Object.keys(obj)方法返回包含所有键名的数组(该方法可以用来判断一个对象是否为空)
  3. delete obj.xx 删除对象的某个属性
  4. 'xx' in obj 判断对象是否有某个属性(继承过来的属性也被包含)
  5. obj.hasOwnProperty('xx') 判断对象是否有某个属性(不包含继承过来的属性也)
叶思玄 wechat
如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!