blogSite

我是谁?我在哪儿?我在干什么?

View project on GitHub

JavaScript 最佳实践

请勿使用 new Object()

  • 请使用 {} 来代替 new Object()
  • 请使用 “” 来代替 new String()
  • 请使用 0 来代替 new Number()
  • 请使用 false 来代替 new Boolean()
  • 请使用 [] 来代替 new Array()
  • 请使用 /()/ 来代替 new RegExp()
  • 请使用 function (){}来代替 new Function()

使用 === 比较

  • == 比较运算符总是在比较之前进行类型转换(以匹配类型)。
  • === 运算符会强制对值和类型进行比较:
  • switch 语句中使用严格比较:
    // 这条 switch 语句会显示提示框:
    var x = 10;
    switch(x) {
        case 10: alert("Hello");
    }

    // 这条 switch 语句不会显示提示框:
    var x = 10;
    switch(x) {
        case "10": alert("Hello");
    }

避免使用 eval()

eval() 函数用于将文本作为代码来允许。在几乎所有情况下,都没有必要使用它。 因为允许任意代码运行,它同时也意味着安全问题。

令人误解的浮点

JavaScript 中的数字均保存为 64 位的浮点数(Floats)。 所有编程语言,包括 JavaScript,都存在处理浮点值的困难:

    var x = 0.1;
    var y = 0.2;
    var z = x + y             // z 中的结果并不是 0.3 而是 0.30000000000000004

    // 为了解决上面的问题,请使用乘除运算:
    var z = (x * 10 + y * 10) / 10;       // z 中的结果将是 0.3

对 JavaScript 字符串换行

JavaScript 允许您把一条语句换行为两行:

    var x =
    "Hello World!";

但是,在字符串中间来换行是不对的:

    var x = "Hello
    World!";

如果必须在字符串中换行,则必须使用反斜杠:

    var x = "Hello \
    World!";

Undefined 不是 Null

在测试非 null 之前,必须先测试未定义:

    // 不正确的:
    if (myObj !== null && typeof myObj !== "undefined")

    // 正确的:
    if (typeof myObj !== "undefined" && myObj !== null)

减少循环中的活动

    // 差的代码:
    var i;
    for (i = 0; i < arr.length; i++) {}

    // 更好的代码:
    var i;
    var l = arr.length;
    for (i = 0; i < l; i++) {}

循环每次迭代时,坏代码就会访问数组的 length 属性。 好代码在循环之外访问 length 属性,使循环更快。

减少 DOM 访问

与其他 JavaScript 相比,访问 HTML DOM 非常缓慢。 假如您期望访问某个 DOM 元素若干次,那么只访问一次,并把它作为本地变量来使用

    var obj;
    obj = document.getElementById("demo");
    obj.innerHTML = "Hello"; 

避免不必要的变量

请不要创建不打算存储值的新变量。 通常您可以替换代码:

    var fullName = firstName + " " + lastName;
    document.getElementById("demo").innerHTML = fullName;  

用这段代码:

    document.getElementById("demo").innerHTML = firstName + " " + lastName;

延迟 JavaScript 加载

请把脚本放在页面底部,使浏览器首先加载页面。 脚本在下载时,浏览器不会启动任何其他的下载。此外所有解析和渲染活动都可能会被阻塞。 HTTP 规范定义浏览器不应该并行下载超过两种要素。 一个选项是在 script 标签中使用 defer="true"。defer 属性规定了脚本应该在页面完成解析后执行,但它只适用于外部脚本。 如果可能,您可以在页面完成加载后,通过代码向页面添加脚本:

    <script>
        window.onload = downScripts;

        function downScripts() {
            var element = document.createElement("script");
            element.src = "myScript.js";
            document.body.appendChild(element);
        }
    </script>

参考内容

首页 > 学习总览 > 开发语言 > JavaScript