空的和不确定的

未定义的变量相当于一个变量,没有显式地赋值(赋值或不忽略,逻辑)。js的奇怪之处在于未定义的值实际上是可以使用的值。


>变量;
> Foo
未定义



同样,当参数丢失时,Javascript分配一个未定义的:


>函数id(x){返回x }
>(ID)
未定义

a = 1;
未定义的真/ = =!

一个未定义的
VaR B
A =




NULL相当于没有显式指定的变量,而不是被意外原因忽略(null赋值、合法逻辑)。

参与操作

如果js的null进入操作,它将真正解析为0或false:


(1 +无效)# 1(1 * 0(零)# 1×空)#无限




未定义进入操作并获得楠:


(1 +未定义)#南(1 *未定义)#南(1 /未定义)#南




逻辑判断

零和未定义的逻辑判断被认为是错误的。

只有一个判断可以同时检验这两个项目是否正确。


将把false、- 0、+ 0、和作为空值。
如果(v){
值
{人}
无值
}



但是如果你遇到了=坑


变量Foo;
console.log(foo = = null); / /真的
console.log(foo = =不明) / /真实;
console.log(foo = null); / /假
console.log(foo =定义); / /真的
console.log(空= =不明) / /真实;



好的实践将使用= =

法官定义和非空,只能使用:如果(= =空)!一个!=未定义的)。

= =和= =

1 =用于确定两个值是否相等。

当两种类型的值不同时,会自动转换,结果与直觉非常不一致,这可能不是你想要的结果。


0 false
0 =
0 =0 /真
falsefalse false
false0
false =未定义的/ false
false = false / false
NULL =未定义的/真的
= 0



2 =

类型+值比较

如果操作数具有相同的类型和值,则返回true = =,!=返回false。

最佳实践:

在任何时候,比较操作=!

JSON操作




无功的人= {姓名:'saad,年龄:26,部门:{编号:15,名称:RD} };

无功stringfromperson = json.stringify(人);
stringfromperson等于 / * {名字:萨阿德

无功personfromstring = JSON.parse(stringfromperson);
personfromstring等于个人目标 / * * /
串

var obj = { {
名称:'myobj
};

JSON.stringify(obj);




函数对象和匿名函数

函数对象分配


无功slice_func = { }。片
/ / slice_func()

var =函数(){()
};
()

var = {
乐趣:函数(){
};
}
( / / a.fun)

SomeElement.addEventListener(单击
我是匿名的!
});




以及


函数(){
返回类型Foo; / / foo是有效的范围内
};
外部不可见
类型 / /定义foo;
(f);



匿名函数


从

变量名= 'chris;
VaR的年龄'34;
无功状态=孤独;
功能createmember(){
{…{ }…}
}
功能getmemberdetails(){
{…{ }…}
}
以

VaR MyApplication =函数(){()
变量名= 'chris;
VaR的年龄'34;
无功状态=孤独;
返回{
createmember:函数(){
{…{ }…}
},
getmemberdetails:函数(){
{…{ }…}
}
}
(});
/ / myapplication.createmember(和)
myapplication.getmemberdetails(现在) / /作品。




最佳实践

1。在定义多个变量时,省略var关键字,并使用逗号代替。


无功someitem =字符串;
无功anotheritem =还有一只柱;
无功onemoreitem =越弦;



更好的做法


无功someitem =字符串,
anotheritem =还有一只柱,
onemoreitem =更多的字符串;



2。记住,不要忽略分号,也不要忽略花括号。

分号的省略可能导致更大、未知、未被发现的问题。


无功someitem =字符串
函数doSomething(){
return'something
}



更好的做法


无功someitem =字符串;
函数doSomething(){
return'something;
}



三.使用对象而不是新的(){ }

在Javascript中创建对象有很多种方法,传统方法可能是使用新的构造函数,如下所示:


新对象();
o.name = 'jeffrey;
o.lastname =道路;
o.somefunction =函数(){
console.log(这个名字);
}



更好的做法



var;{ /空对象




var { { { {
名称:'jeffrey,
lastName =道路,
功能:功能(){
console.log(这个名字);
}
};



只要多个全局变量被设置在一个命名空间,这将大大减少与其他应用程序不发生相互作用的可能性,组件或类库。道格拉斯克罗克福德

4。使用数组代替新的(){ }


var =新数组();
{ 0 } 乔;
一个{ 1 } = 'plumber;



更好的做法:


var a = { '乔','plumber};



5.typeof判断

型一般只能返回以下结果:数字、布尔、字符串、函数、对象、定义

Expr:


类型=XX
类型的XX = =!



例如.


数字
Typeof 37 =数;
3.14 =若干类型的;
类型=无穷数;
Typeof NaN =数'; / /楠虽然是非数字的缩写

字符串
类= 'String';
typeof'string=BLA;
Typeof(类型1)= = = 'String'; / /类型的回报肯定是一个字符串

/ /布尔运算
真正的'boolean类型=;
Typeof false ='boolean';

未定义
类定义= 'undefined;
typeof blabla = 'undefined '; / /一个未定义的变量,或一个定义而不是变量的初始值

对象
{ 1 } =类型:'object;
类{ 1, 2, 4 } = 'object '; / / array.isarray或object.prototype.tostring.call方法可以区分数组和实物之间
种新的(日期)= 'object;

函数
Typeof(功能){ } = = = 'function;
Typeof Math.sin = 'function;

类型的空'object '; / / Javascript从出生,一直都是这样的。




6。三元运算符:强和风骚

语法


XXX:YYY的表达
坏

VaR的方向;
如果(x<200){
方向= 1;
{人}
方向= 1;
}
OD

var方向= x 2001:- 1;




7。使用逻辑和/或判断条件


var = 10;
foo = = 10); / / doSomething(相当于如果(foo = = 10)(做);
foo = = 5); / / | | doSomething(相当于如果(Foo!= 5)(做);

默认值
a b'default| |
返回B C D | | | | > 10:2




8。当您将变量赋给变量时,不要忘记使用var关键字。

将一个未定义的变量赋给变量会导致创建一个全局变量。

9。自我调用功能

调用匿名函数(自调用匿名函数)或立即调用函数表达式(生活立即调用函数表达式)。这是一个函数,创建后立即自动执行


(函数({){)
一些自动执行的私有代码。
});

(函数(a,b){)
var结果;
返回结果;
})(10,20)




10。避免使用eval()和函数的构造

eval =邪恶不仅降低了脚本的性能大大提高,但同时也带来了巨大的安全隐患,因为JIT太高的权限。

使用eval和函数的构造函数是一个非常昂贵的操作,因为他们每次调用脚本引擎的源代码转换成可执行的代码。


VaR func1 =新的功能(功能码);
VaR func2 = eval(功能码);



11。避免使用()

使用()插入全局变量。因此,相同名称的变量将被覆盖并造成不必要的麻烦。

12。脚本放置在页面的底部。

记住,主要目标是使页面尽可能快地向用户提供页面。文件夹被阻塞了。在加载和执行脚本之前,浏览器不能继续呈现以下内容。因此,用户将不得不等待更长时间。

13。避免在语句中声明变量

坏


对于(var i = 0;我< someArray.length;i++){
var container = document.getelementbyid('container');
我的号码:container.innerHTML = +我;
console.log(我);
}



OD


var container = document.getelementbyid('container');
对于(var i = 0,len = someArray.length;我< len;i++){
我的号码:container.innerHTML = +我;
console.log(我);
}



14。向代码添加注释


循环数组,每个输出名称(译者注:这个注释看起来有点多余)。
对于(var i = 0,len = array.length;我< len;i++){
console.log(数组{我});
}



15.instanceof

这是法要求开发商明确确认的对象是一种特殊类型


无功ostrinbject =新的字符串(Hello World);
console.log(ostrinbject是字符串); / /输出真

以确定它是否是富类的一个实例。
函数(富){ }
新富();
console.log(foo instanceof Foo) / /真的

以确定它是否是富类的一个实例,其父是该类型的实例。
功能(AOO){ }
函数(富){ }
foo.prototype =新AOO(); / / Javascript原型继承

新富();
console.log(foo instanceof Foo) / /真的
console.log(foo instanceof AOO) / /真的




16、应用 /调用


somefn.call(arg1,arg2这样,ARG3);
SomeFn.apply(,{ arg1,arg2,ARG3 });



应用

的function.apply(obj,args)方法可以得到两参数

Obj:这个对象在函数类替换此对象

参数:这是一个数组,它将作为一个参数传递给函数(参数-->参数)。

呼叫


function.call(obj参数param2 { { {,} } {,石蜡,…} })



Obj:这个对象在函数类替换此对象

参数:这是一个参数列表

这取决于参数的类型。