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 : 将返回,无用且令人困惑
暂无评论内容