//如果变量和函数需要在“外面”引用,需要把你的变量和函数放在一个“命名空间”中
//我们这里用一个function做命名空间而不是一个var,因为在前者中声明function更简单,而且能保护隐私数据
myNameSpace = function(){
var current = null;
function init(){...}
function change(){...}
function verify(){...}
//所有需要在命名空间外调用的函数和属性都要写在return里面
return{
init:init,
//甚至你可以为函数和属性命名一个别名
set:change
}
}();
声明变量的话,总是用var
JavaScript中的变量可能是全局域或者局部域,用var声明的话会更加直观。
复制代码 代码如下:
//在function中不用var引起的迷惑性问题
var i=0; // This is good - creates a global variable
function test() {
for (i=0; i<10; i++) {
alert("Hello World!");
}
}
test();
alert(i); // The global variable i is now 10!
复制代码 代码如下:
//解决方法是在function中声明变量也用var
function test() {
for (var i=0; i<10; i++) {
alert("Hello World!");
}
}
使用前置+号来把字符串转化为数字
JavaScript中,“+”操作符即被用来作为数字加,也被用来连接字符串。如果需要求表单中几个值的和,那么用+可能会出现问题。
复制代码 代码如下:
//会出现问题的代码
<form action="[url]">
<input type="text" value="1">
<input type="text" value="2">
</form>
function total() {
var theform = document.forms["myform"];
var total = theform.elements["val1"].value + theform.elements["val2"].value;
alert(total); // This will alert "12", but what you wanted was 3!
}
复制代码 代码如下:
//在字符串前面加上“+”,这是给JavaScript的一个暗示:这是一个数字而不是字符串
function total() {
var theform = document.forms["myform"];
var total = (+theform.elements["val1"].value) + (+theform.elements["val2"].value);
alert(total); // This will alert 3
}
避免使用eval()方法
JavaScript中的eval()方法是在运行时把任何代码当作对象来计算/运行的方法。实际上由于安全性的缘故,大部分情况下都不应该用eval(),总是有一种更“正确”的方法来完成同样的工作的。基本原则是,eval is evil,在任何时候都不要用它,除非你是一个老手,并且知道你不得不这样做。
for in语句
遍历一个对象中的所有条目的时候,用for in语句是非常方便的。但有时候我们不需要遍历对象中的方法,如果不需要的话,可以加上一条filter。
复制代码 代码如下:
//加上了一个过滤器的for in语句
for(key in object) {
if(object.hasOwnProperty(key) {
...then do something...
}
}
不要偷懒省略”和{}
从技术上说,你可以忽略很多花括号和分号。
复制代码 代码如下:
//虽然看上去很不对头,大部分浏览器都能正确解析这段代码
if(someVariableExists)
x = false
复制代码 代码如下:
//这个代码看上去更不对头了,咋眼一看似乎下面的句都被执行了
//实际上只有x=false在if中
if(someVariableExists)
x = false
anotherFunctionCall();
所以,要记住的原则是:1.永远不要省略分号;2.不要省略花括号,除非在同一行中。
复制代码 代码如下:
//这样是OK的
if(2 + 2 === 4) return 'nicely done';
获取对象属性的时候用方括号而不是点号
在JavaScript中取得某对象的属性有两种方法:
复制代码 代码如下:
//点号标记
MyObject.property
复制代码 代码如下:
//方括号标记
MyObject["property"]
如果是用点号标记取得对象的属性,属性名称是硬编码,无法在运行时更改;而用方括号的话,JavaScript会求得方括号内值然后通过计算结果来求得属性名。也就是说用方括号标记的方式,属性名称可以是硬编码的,也可以是变量或者函数返回值。
复制代码 代码如下:
//这样是不行的
MyObject.value+i
复制代码 代码如下:
//这样就没有问题
MyObject["value"+i]
假设JavaScript会被禁用
我知道这样的假设会伤害JavaScript开发者的感情,可是在目前数据不明朗的情况下我们为了安全起见应该做这样的假设。这是渐进增强中很重要的一部分。
使用JavaScript库
现在有很多非常流行的JavaScript库,比如YUI和jQuery、Dojo。它们的缺点是需要下载一个额外的文件,优点却更多:兼容性更强;代码更简单易懂。好的库有很多,但你不应该在一个项目中把它们都用上,因为可能存在兼容性问题。选择一个自己习惯的就好。
不要忘记的一点是,原生的JavaScript毫无疑问更快,如果是小规模的使用,最好还是用原生的。
您可能感兴趣的文章: