转载 - 读网上文档 - 笔记 - JS 编程最佳实践(Best Practice)

原文地址:

1). JavaScript Best Practices: http://www.w3schools.com/js/js_function_closures.asp

2). JavaScript Closures http://www.w3schools.com/js/js_function_closures.asp

3). JavaScript 严格模式 http://blog.csdn.net/supersky07/article/details/14129179

1. 关于全局变量

  • 尽可能减少使用全局变量(去表示数据类型、对象和函数),全局变量或函数可能被所引用的其他JS 脚本所覆盖。
  • 网页中,全局变量属于 Winow 这个对象
  • 当定义变量时没有使用关键词 var,这个变量讲被定义成全局的,即使它在某个函数内部创建

2. 闭包

var add = (function () {
    var counter = 0;
    return function () {return counter += 1;}
})();

add();
add();
add();

// the counter is now 3

变量 add 的初始值为 一个self-invoking函数的返回值,这个self-invoking的函数只执行一次。通过上述代码,我们成功地将 add 变成了函数,而且它还可以访问那个函数的的parent scipe的变量 - counter。

这个例子就叫做 JavaScript 闭包,使得 JS 中实现“private” 变量成为可能。上述例子中的 counter 是由匿名函数的scope保护的,而且只能通过 add 函数访问。

3. Strict mode

  • Strict mode下,不允许未(利用 var)声明的变量
  • 如果一个内部方法定义在一个声明了"use strict"的外部方法内,那么它也会启用严格模式。
  • 在严格模式中,this的值不会被自动的变成一个对象。最值得注意的是,当call或apply的第一个参数为null或undefined时,被引用方法中的this的值将不会被转换成全局对象。(译者注:非严格模式下会转化成window,严格模式下为null)

4. 将变量声明放在函数或脚本的最上面,声明时将变量初始化

5. 不要使用 new Object()

  • Use {} instead of new Object()
  • Use "" instead of new String()
  • Use 0 instead of new Number()
  • Use false instead of new Boolean()
  • Use [] instead of new Array()
  • Use /()/ instead of new RegExp()
  • Use function (){} instead of new function()

6. 注意类型自动转换

var x = "Hello";     // typeof x is a string
x = 5;               // changes typeof x to a number

当进行数学运算时, JS 可以将数字转成字符串

var x = 5 + 7;       // x.valueOf() is 12,  typeof x is a number
var x = 5 + "7";     // x.valueOf() is 57,  typeof x is a string
var x = "5" + 7;     // x.valueOf() is 57,  typeof x is a string
var x = 5 - 7;       // x.valueOf() is -2,  typeof x is a number
var x = 5 - "7";     // x.valueOf() is -2,  typeof x is a number
var x = "5" - 7;     // x.valueOf() is -2,  typeof x is a number
var x = 5 - "x";     // x.valueOf() is NaN, typeof x is a number

两个字符串相减,不会出错而是返回 NaN (Not a Number)

"Hello" - "Dolly"    // returns NaN

7. 三个等号

== 两个等号做对比时,会将操作数做类型转换;

=== 三个等号做对比时,会强制比较操作数类型的值

0 == "";        // true
1 == "1";       // true
1 == true;      // true

0 === "";       // false
1 === "1";      // false
1 === true;     // false

8. 当一个函数调用时没有传递参数,参数值将被设置为 undefined

9. 避免使用eval()- eval()可以将text 作为code执行

时间: 2024-08-04 19:48:16

转载 - 读网上文档 - 笔记 - JS 编程最佳实践(Best Practice)的相关文章

JS编程最佳实践

最近花了一周时间把<编写可维护的js> 阅读了一遍, 现将全书提到的JS编程最佳实践总结如下, 已追来者! 1.return 之后不可直接换行, 否则会导致ASI(自动分号插入机制)会在return 后插入一个分号. 2.一行语句最多不超过80个字符, 如果超过则应该在运算符后换行,并且追加两个缩进. 3.采用驼峰式命名,变量前缀为名词如:myName 函数应该以动词开始如:getName,常量应该以大写字母命名,如:MAX_COUNT, 构造函数首字母大写. 4.数字的写法: 整数:coun

完美CSS文档的8个最佳实践

  在css的世界,文档没有被得到充分的利用.由于文档对终端用户不可见,因此它的价值常常被忽视.另外,如果你第一次为css编写文档,可能很难确定哪些内容值得记录,以及如何能够高效完成编写. 然而,为CSS编写文档可以为你的项目提供很多好处:促进更好的代码实践.降低新员工的上手难度.在本文中,我将说明编写CSS文档的优点,并分享我认为的最佳实践.让文档为你工作,而不是阻碍你的工作. 1. 制定基本规则 当你和你的团队不清楚CSS文档具体需要编写哪些内容.文档应该如何工作时,你很难跟上编写CSS文档

Atitit.angular.js 使用最佳实践 原理与常见问题解决与列表显示案例 attilax总结

Atitit.angular.js 使用最佳实践 原理与常见问题解决与列表显示案例 attilax总结 1. 本文范围 1 2. Angular的优点 1 2.1. 双向数据绑定 1 2.2. dsl化 2 2.3. 依赖注入 2 2.4. 指令 2 3. 手动绑定数据spa方式以及与ajax 与dwr的集成 2 4. 格式化数据 2 4.1. 多字段组合格式化 3 4.2. 输出html 4 5. 输出作为函数参数调用 4 6. 加载完成事件 5 7. 常见错误 5 7.1. Atitit.a

[转载]正则表达式参考文档 - Regular Expression Syntax Reference.

正则表达式参考文档 - Regular Expression Syntax Reference. [原创文章,转载请保留或注明出处:http://www.regexlab.com/zh/regref.htm] 引言 正则表达式(regular expression)就是用一个“字符串”来描述一个特征,然后去验证另一个“字符串”是否符合这个特征.比如 表达式“ab+” 描述的特征是“一个 'a' 和 任意个 'b' ”,那么 'ab', 'abb', 'abbbbbbbbbb' 都符合这个特征.

文档笔记说明

2015.4.18始-中级前端交流群日常问题集 注:以下文档基于“js中级前端开发群”日常讨论问题及相应解析进行相关记录. 起源:加入豪哥前端交流群之后,尤其从初级群升到中级群之后,感觉收获很多,成长也很快 .这都是跟规范“群规”引导下的良好的问答氛围以及热情交流的群员帮助是分不开的,使很多新人避免了不少弯路,但同时也暴露出一些问题,没有一份详细的笔记来记录我们的“成长过程”,比如日常讨论经常出现一些“经验性解答”和当前“前端流行趋势”的讨论,故因此想收集起来这些问题和讨论,作为日后所遇问题的查

VTk与MFC单文档程序联合编程

兴趣需要,想做下VTK与MFC想结合的程序,MFC快要在桌面程序上面失去市场份额了,现在大多使用QT来做,但是本科的时候学的就是MFC,也相对来说比较熟悉,所以就想使用MFC来写一个简单的单文档程序.首先我们需要在编译的时候将USEGUISUPPORT->USEMFC勾选上,才能在MFC平台上使用VTK.网络上现在大多流行两种VTK和MFC的方法,其实两者结合的关键就是将VTK的绘制窗口vtkrenderwindow与MFC中的view窗口相一致,让VTK上的绘制图形能够在MFC上的VIEW类上

[转载]MFC一个文档不同视图

MDI(MultipleDocument Interface)是Windows界面的一种规范,它建立多个窗口来浏览文档数据,如Windows中的ProgramManager等都是按MDI规范实现的.在实际工程软件开发中,许多程序员将其作为一种实现多窗口的标准方法.微软基础类库(MicrosoftFoundationClassLibrary,简称MFC库),是微软公司为方便Windows程序开发所提供的一个功能强大的通用类库.MFC的核心是以类的形式封装了大量WindowsAPI.在可视化编程语言

VS Code 中 HTML 文档注释 js 语句异常

今天用 VS Code 编辑 html 文档时,发现快捷键注释 js 代码显示成 “<!--  …… -->”,怀疑是不是因为安装了某个插件,随后排查出系 Jinja 所致,将其禁用之后就可以正常快捷注释 html 文档中的 javascript 代码和 css 代码了. 原文地址:https://www.cnblogs.com/xunzhiyou/p/10795214.html

jquery学习文档笔记

1.未见过的事件: focusin跟focus事件区别在于,他可以在父元素上检测子元素获取焦点的情况. focusout跟blur事件区别在于,他可以在父元素上检测子元素失去焦点的情况. 2.使用wrapAll方法 举例如下 原始代码: <div class="mm"><p>我们在公司</p></div><div class="mv">    <p>我们在公司</p>    <