JavaScript语言精粹---笔记

1.原型链接只有在检索时候才会被发现。如果我们尝试去获取对象的某个属性值,但该对象没有此属性名,那么javascript会尝试从原型中获取该属性值。以此类推,直至找到最后的终点Object.protorype。这个过程被称为委托。并且原型是一种动态的关系,当有新属性添加时,该属性会立即作用于该原型链中的所有对象。
2.枚举语句for in 会遍历一个对象中的所有属性名。包括你定义的原型中的属性。所以在使用时有必要过滤掉你不需要的对象,比较常见的过滤函数是hasOwnProperty,或者typeof;
3.函数在创建时会附带两个隐藏属性:函数上下文和实现函数行为的代码(函数的调用属性);函数的本质是一个对象,当函数调用时可以理解为调用该对象的“调用”属性。
4.JavaScript中有4种调用模式:方法调用模式,函数调用模式,构造器调用模式和apply调用模式。
4.1方法调用模式:当一个函数被保存为对象的一个属性时,被称为一个方法,当方法被调用时,this被绑定到该对象。方法可以使用this访问自己所属的对象,并且能够从对象中取值或对对象进行修改。this发生作用是在该函数被调用的时候。
4.2函数调用模式:当一个函数并非一个对象的属性时,那么它就是被当作一个函数来调用。此时this被绑定到全局对象。如果有内部函数,那么内部函数的this仍然是指向的全局对象,如果要解决这个问题,则可以在外部函数用that=this语句来绑定当前this指向,然后采用闭包的形式来访问函数内部属性。
4.3构造器调用模式:当一个命名函数被new时,这个函数被称为构造器函数,此时会先创建一个链接到该函数的prototype成员的新对象,并且把this绑定到新创建的对象上面。
4.4apply调用模式:apply方法放我们构建按一个参数数组传递给调用函数。它允许我们选择this的值。apply方法接收两个参数,第一个是要绑定给this的值,第二个是参数数组。
5.arguements不是一个真正的数组,而是一个带有length属性的对象。
6.避免在循环中创建函数,这可能会导致无尽的计算,可以在循环外创建一个辅助函数,让这个函数然会一个处理当前事件的函数。
7.函数构造器模式:(1)创建一个新对象,它继承自构造器函数的原型对象。(2)调用构造器函数,绑定this到新对象上。(3)返回该新对象。
8.何时使用数组和对象:当属性名是小而连续的整数时使用数组,否则使用对象。判断一个对象是否为数组时可用:

let is_array = function (val) {
return Object.prototype.toString.apply(val) === '[object Array]'
}

9.正则表达式分组:(1)捕获型,一个捕获型分组是一个被包围在圆括号中的正则表达式分支。任何匹配这个分组的字符都会被捕获。(2)非捕获型分组,非捕获型分组有一个(? : 前缀。非捕获型分组仅做简单的匹配,并不会捕获所匹配的文本。(3)向前正向匹配,(?= 做前缀,类似于非捕获型分组,但是在这个组匹配后,文本会倒回到它开始的地方,实际上并不匹配任何东西。(4)向前负向匹配,(?! 做前缀,跟向前正向匹配类似,但是它只有匹配失败时他才会继续向前匹配。
10.js中的糟粕:(1)==和=== 双等号在比较是会强制转换值的类型,无法正确判断运算数类型的一致性。(2)with语句,with的本意是想快捷的访问对象的属性,但是使用它时会阻断变量名的词法作用域绑定,影响javaScript处理器的速度。

with(obj){
a=b;//此时无法确定是  a=b   或是  a=obj.b  或   obj.a=b   或   obj.a=obj.b
}

(3)eval:eval函数传递一个字符串给javaScript编译器,并且执行其结果。但是使用eval形式的代码更加难以阅读,并且它需要运行编译器,会使性能降低。eval函数会减弱你的应用程序的安全性,因为它给传入的字符串文本授予了太多的权力。(4)function语句和function表达式:一个function语句就是其值为一个函数的var语句的速记形式;最好使用var foo=function foo(){}这种形式,因为它能明确表示foo是一个包含一个函数值的变量。function语句在解析时会发生被提升的情况。在if语句中使用function语句是被禁止的,结果表明大多数的浏览器都允许在if语句里使用function语句,但是他们在解析时的处理各不相同,这就造成了可移植性的问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值