javascript语言精粹

1.6个值都会为false(==false),即false,null,,”,0,NaN

2.有6个值,分别是”,”,”,”,”,”; ​​where(null),结果是”

3.类型始终为64位浮点数,两个整数相除也可能产生非整数结果

4.如果第一个操作数的值为假,则运算符 && 产生其第一个操作数的值。否则,它产生第二个操作数的值。例如,使用 && 操作符来避免检索引起的异常

。 //

..model //throw””

.&&..model //

5.运算符 ||如果第一个操作数的值为真,则产生其第一个操作数的值。否则,它产生第二个操作数的值。例如,可以使用 ||运算符填写默认值

var = . || “”

6.对象通过引用传递,从不复制

7.更新对象时原型链的属性没有影响。当我们对对象进行更改时,不会触及对象的原型。原型链只有在取到值的时候,才会从下往上走,直到找到,找到就使用,然后停止搜索,没有找到就返回。这个过程称为委托。该方法可以检测对象具有的独特属性。

8.通过for in语句迭代的对象属性包括其原型链上的属性,并且是乱序的;而for语句根据对象循环出来的属性只包含唯一的属性,顺序为

8.

9.你可以在不触及对象原型的属性的情况下删除对象的属性

10.函数也是对象,由对象字面量产生的对象有一个到 . 的隐藏链接,而函数对象有一个到 . 的隐藏链接。 (原型对象本身链接到 .)。每个函数对象在创建时还附带一个属性,其值为一个有属性的对象,其值为函数

11.每个函数都有两个额外的隐藏属性:函数的上下文(可调用)和实现函数行为的代码;调用函数将暂停当前执行,将控制和参数传递给新函数。除了在声明时定义的形参之外,每个函数还接收两个附加参数: this 和 , 。表示函数本身,通常用于递归

12.参数this的值取决于调用方式。调用方式有四种:

方法调用模式:当一个函数被保存为一个对象的属性时,我们称它为一个方法,而当一个方法被调用时,this是绑定到对象上的(只要调用函数时带有.dot或[]下标方法调用,则作为方法调用)

函数调用方式:当函数不是对象的属性时,作为函数调用,this绑定到全局对象;解决内部函数this指向全局的设计缺陷,可以在外部调用var that=this;与浏览器一样,this = ;在节点中,this = 地球

构造函数调用模式:如果调用一个函数前面有new,将创建一个新对象,该对象隐藏与该函数链接的成员,并且this将绑定到该新对象。

应用调用方式:this绑定第一个参数,即传入对象

13. 当函数的实参()个数和类型参()个数不匹配时,不会报错;如果实际参数过多,则忽略多余的参数。如果实际参数太少,就会传入缺失的参数。

14.它不是真正的数组,它只是一个类似数组的对象,除了属性之外缺少数组方法。

14.5A 函数总是会返回一个值。如果没有指定返回值,则返回。如果函数在new模式下被调用,返回值不是对象,则返回this(新对象)

14.5p>

15.缺少块作用域,所以最好的做法是在函数体顶部声明可能在函数中使用的变量

16.使用闭包返回外部函数变量可以避免函数被加新的使用

闭包:var quo = (){

{

: () {

;

}

};

};

var myQuo = quo (“”);

构造函数:

var Quo = (){

这个.=;

};

var myQuo = new Quo(“”);

17.一个封闭坑

var = (节点) {

变量 i;

for(i = 0;i < 节点。;i+= 1) {

节点[i]。 = (e){

警报(i);

}

}

};

该函数的目的是为每个事件处理程序赋予一个唯一值 (i)。它失败是因为事件处理函数绑定到变量 i,而不是构造函数时变量 i 的值。

p>

改正如下拼写即可达到目的:

var = (节点) {

变量 i;

for(i = 0;i < 节点。;i+= 1) {

节点[i]。 = (i){

(e){

警报(e);

};

}(i);

}

};

18.回调

模拟异步请求,避免客户端阻塞

= ();

(,(){

();

};

19.() 是由函数和闭包创建的,只暴露了可用的方法,而所有其他方法似乎都被隐藏了。如果不需要传参数或者没有什么特别严格的要求,我们可以在最后一个}后面加一个括号来实现自执行,这样内存中就只存在一个实例。单例模式可以通过模块模式实现

var = ((){

变量 i = 10;

{

:(x) {

x*i;

}

};

}());

呼叫:.(5);

20.通用递归内存函数,增加内存参数可以减少递归函数调用次数,显着提高效率

var = (备忘录,) {

var shell = (n) {

var = memo[n];

如果(!== ”){

= (shell,n);

备忘录[n] = ;

}

;

};

壳;

};

呼叫:

var = ([0,1],(shell,n){

壳(n-1)+壳(n-2);

});

.log((10));

21.创建函数对象时,构造函数生成的函数对象会运行类似的代码:this。 = { : 这个};按照惯例,所有构造函数都以大写字母命名,但更好的选择是不应用 new

22.构造函数接受大量参数:

不推荐:var = maker(f,l,m,c,s);

建议写作:var = maker({

第一:f,

最后:l,

状态:s,

城市:c

});

优点是多个参数可以任意排序。如果有默认值,部分参数可以忽略,代码更容易阅读

23.在纯原型模式中,我们会放弃类而专注于对象,新对象可以继承现有对象的属性

24.在伪类模式和模块模式下,尽量选择后者,函数式构造器伪代码模板

var = (spec ,my) {

var that,其他私有实例变量;

我的 = 我的 || {};

将共享变量和函数添加到我的

that = 一个新对象

添加了一个特权方法

那个;

}

数组

25. 是一个具有一些类似数组特征的对象。它将数组的下标转换为字符串并将其用作属性。与普通属性相比,可以使用整数作为属性名。并继承自 Array.,多了一个属性;同一个数组的元素可以是混合类型,没有上限。

26. var = [‘零’,’一’,’二’];

[.] = ‘三’;相当于

.push(‘三’);

27.是否阵列检测

var = (值) {

价值&&

值 === ” &&

值。 === ” &&

值。 === ” &&

!(值.(”));

};

28.渣滓

全局变量:越少越好

作用域:无块作用域,在每个函数的开头声明所有变量

自动插入分号:所以大括号样式使用埃及方括号

:字符为16位,只能覆盖65535个字符

:添加第二个参数,清除基数,(“08”, 10)

浮点数:二进制浮点数不能正确处理小数,0.1+0.2不等于0.3,但整数部分是精确的

NaN : NaN === ” //true; NaN === NaN //假;

对象:由于原型链的存在,对象永远不会有真正的空对象

2中的鸡肋9.

运算符 == 和 != : 会尝试强制转换判断值的类型,规则复杂

with 语句:可能有歧义并影响处理器速度

eval : 降低安全性,增加读取复杂度

:重构移出后,性能得到提升

++ — : 让代码更晦涩

位运算符:没有整数类型,位运算符将其操作数转换为整数,然后执行运算,然后再转换回来,很慢

:不要在if语句中使用,尽量以var func = …的形式声明

new :更好的应对策略是根本不使用 new

void : 将返回,无用且令人困惑

© 版权声明
THE END
喜欢就支持一下吧
点赞212 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片