你认为每个程序员都应该知道 JavaScript 的哪些“隐藏特性”?
在看到以下问题的高质量答案后,我认为是时候向它询问 JavaScript 了。
尽管 JavaScript 可以说是目前最重要的客户端语言(问问 Google),但令人惊讶的是,大多数 Web 开发人员很少意识到它的强大功能。
你认为每个程序员都应该知道 JavaScript 的哪些“隐藏特性”?
在看到以下问题的高质量答案后,我认为是时候向它询问 JavaScript 了。
尽管 JavaScript 可以说是目前最重要的客户端语言(问问 Google),但令人惊讶的是,大多数 Web 开发人员很少意识到它的强大功能。
您不需要为函数定义任何参数。您可以只使用该函数的arguments
类似数组的对象。
function sum() {
var retval = 0;
for (var i = 0, len = arguments.length; i < len; ++i) {
retval += arguments[i];
}
return retval;
}
sum(1, 2, 3) // returns 6
我可以引用道格拉斯·克罗克福德 (Douglas Crockford) 的优秀著作JavaScript: The Good Parts 的大部分 内容。
但我只给你一个,总是用===
and!==
代替==
and!=
alert('' == '0'); //false
alert(0 == ''); // true
alert(0 =='0'); // true
==
不是可传递的。如果您使用===
它,则会按预期为所有这些语句提供 false。
函数是 JavaScript 中的一等公民:
var passFunAndApply = function (fn,x,y,z) { return fn(x,y,z); };
var sum = function(x,y,z) {
return x+y+z;
};
alert( passFunAndApply(sum,3,4,5) ); // 12
特别是,函数可以作为参数传递,例如Array.filter()接受回调:
[1, 2, -1].filter(function(element, index, array) { return element > 0 });
// -> [1,2]
您还可以声明一个仅存在于特定函数范围内的“私有”函数:
function PrintName() {
var privateFunction = function() { return "Steve"; };
return privateFunction();
}
您可以使用in运算符检查对象中是否存在键:
var x = 1;
var y = 3;
var list = {0:0, 1:0, 2:0};
x in list; //true
y in list; //false
1 in list; //true
y in {3:0, 4:0, 5:0}; //true
如果您发现对象文字太难看,您可以将其与无参数函数提示结合使用:
function list()
{ var x = {};
for(var i=0; i < arguments.length; ++i) x[arguments[i]] = 0;
return x
}
5 in list(1,2,3,4,5) //true
为变量分配默认值
您可以||
在赋值表达式中使用逻辑或运算符来提供默认值:
var a = b || c;
该a
变量将获得的valuec
只有当b
是falsy(如果是null
,false
,undefined
,0
,empty string
,或NaN
),否则a
将获得的valueb
。
这在函数中通常很有用,当您想在未提供参数的情况下为参数提供默认值时:
function example(arg1) {
arg1 || (arg1 = 'default value');
}
事件处理程序中的 IE 回退示例:
function onClick(e) {
e || (e = window.event);
}
以下语言特性已经存在很长时间了,所有 JavaScript 实现都支持它们,但直到ECMAScript 5th Edition之前它们才成为规范的一部分:
该debugger
声明
描述于:§ 12.15 调试器语句
此语句允许您通过以下方式以编程方式在代码中放置断点:
// ...
debugger;
// ...
如果调试器存在或处于活动状态,它将导致它立即中断,就在该行上。
否则,如果调试器不存在或不活动,则此语句没有可观察到的效果。
多行字符串文字
描述于:§ 7.8.4 字符串文字
var str = "This is a \
really, really \
long line!";
你必须小心,因为旁边的字符\
必须是一个行终止符,如果你在\
example后面有一个空格,代码看起来完全一样,但它会引发一个SyntaxError
.