译自:https://github.com/airbnb/javascript
类型
- string
- number
- boolean
- null
- undefined
- var foo = 1,
- bar = foo;
-
- bar = 9;
-
- console.log(foo, bar);
复杂类型: 相当于传引用
-
- object
- array
- function
- var foo = [1, 2],
- bar = foo;
-
- bar[0] = 9;
-
- console.log(foo[0], bar[0]);
对象
数组
-
使用字面值创建数组
-
- var items = new Array();
-
-
- var items = [];
-
如果你不知道数组的长度,使用push
- var someStack = [];
-
-
-
- someStack[someStack.length] = 'abracadabra';
-
-
- someStack.push('abracadabra');
-
当你需要拷贝数组时使用slice. jsPerf
- var len = items.length,
- itemsCopy = [],
- i;
-
-
- for (i = 0; i < len; i++) {
- itemsCopy[i] = items[i];
- }
-
-
- itemsCopy = items.slice();
-
使用slice将类数组的对象转成数组.
- function trigger() {
- var args = Array.prototype.slice.call(arguments);
- ...
- }
字符串
<函数
-
函数表达式:
-
- var anonymous = function() {
- return true;
- };
-
-
- var named = function named() {
- return true;
- };
-
-
- (function() {
- console.log('Welcome to the Internet. Please follow me.');
- })();
-
绝对不要在一个非函数块里声明一个函数,把那个函数赋给一个变量。浏览器允许你这么做,但是它们解析不同。
-
注: ECMA-262定义把块
定义为一组语句,函数声明不是一个语句。阅读ECMA-262对这个问题的说明.
-
- if (currentUser) {
- function test() {
- console.log('Nope.');
- }
- }
-
-
- if (currentUser) {
- var test = function test() {
- console.log('Yup.');
- };
- }
-
绝对不要把参数命名为 arguments
, 这将会逾越函数作用域内传过来的 arguments
对象.
-
- function nope(name, options, arguments) {
-
- }
-
-
- function yup(name, options, args) {
-
- }
属性
-
当使用变量访问属性时使用中括号.
- var luke = {
- jedi: true,
- age: 28
- };
-
- function getProp(prop) {
- return luke[prop];
- }
-
- var isJedi = getProp('jedi');
变量
-
总是使用 var
来声明变量,如果不这么做将导致产生全局变量,我们要避免污染全局命名空间。
-
- superPower = new SuperPower();
-
-
- var superPower = new SuperPower();
-
使用一个 var
以及新行声明多个变量,缩进4个空格。
-
- var items = getItems();
- var goSportsTeam = true;
- var dragonball = 'z';
-
-
- var items = getItems(),
- goSportsTeam = true,
- dragonball = 'z';
-
最后再声明未赋值的变量,当你想引用之前已赋值变量的时候很有用。
-
- var i, len, dragonball,
- items = getItems(),
- goSportsTeam = true;
-
-
- var i, items = getItems(),
- dragonball,
- goSportsTeam = true,
- len;
-
-
- var items = getItems(),
- goSportsTeam = true,
- dragonball,
- length,
- i;
-
在作用域顶部声明变量,避免变量声明和赋值引起的相关问题。
-
- function() {
- test();
- console.log('doing stuff..');
-
-
-
- var name = getName();
-
- if (name === 'test') {
- return false;
- }
-
- return name;
- }
-
-
- function() {
- var name = getName();
-
- test();
- console.log('doing stuff..');
-
-
-
- if (name === 'test') {
- return false;
- }
-
- return name;
- }
-
-
- function() {
- var name = getName();
-
- if (!arguments.length) {
- return false;
- }
-
- return true;
- }
-
-
- function() {
- if (!arguments.length) {
- return false;
- }
-
- var name = getName();
-
- return true;
- }
条件表达式和等号
块
-
给所有多行的块使用大括号
-
- if (test)
- return false;
-
-
- if (test) return false;
-
-
- if (test) {
- return false;
- }
-
-
- function() { return false; }
-
-
- function() {
- return false;
- }
注释
-
使用 /** ... */
进行多行注释,包括描述,指定类型以及参数值和返回值
-
-
-
-
-
-
- function make(tag) {
-
-
-
- return element;
- }
-
-
-
-
-
-
-
-
-
- function make(tag) {
-
-
-
- return element;
- }
-
使用 //
进行单行注释,在评论对象的上面进行单行注释,注释前放一个空行.
-
- var active = true;
-
-
-
- var active = true;
-
-
- function getType() {
- console.log('fetching type...');
-
- var type = this._type || 'no type';
-
- return type;
- }
-
-
- function getType() {
- console.log('fetching type...');
-
-
- var type = this._type || 'no type';
-
- return type;
- }
-
如果你有一个问题需要重新来看一下或如果你建议一个需要被实现的解决方法的话需要在你的注释前面加上 FIXME
或 TODO
帮助其他人迅速理解
- function Calculator() {
-
-
- total = 0;
-
- return this;
- }
- function Calculator() {
-
-
- this.total = 0;
-
- return this;
- }
空白
-
将tab设为4个空格
-
- function() {
- ∙∙var name;
- }
-
-
- function() {
- ∙var name;
- }
-
-
- function() {
- ∙∙∙∙var name;
- }
-
大括号前放一个空格
-
- function test(){
- console.log('test');
- }
-
-
- function test() {
- console.log('test');
- }
-
-
- dog.set('attr',{
- age: '1 year',
- breed: 'Bernese Mountain Dog'
- });
-
-
- dog.set('attr', {
- age: '1 year',
- breed: 'Bernese Mountain Dog'
- });
-
在做长方法链时使用缩进.
-
- $('#items').find('.selected').highlight().end().find('.open').updateCount();
-
-
- $('#items')
- .find('.selected')
- .highlight()
- .end()
- .find('.open')
- .updateCount();
-
-
- var leds = stage.selectAll('.led').data(data).enter().append('svg:svg').class('led', true)
- .attr('width', (radius + margin) * 2).append('svg:g')
- .attr('transform', 'translate(' + (radius + margin) + ',' + (radius + margin) + ')')
- .call(tron.led);
-
-
- var leds = stage.selectAll('.led')
- .data(data)
- .enter().append('svg:svg')
- .class('led', true)
- .attr('width', (radius + margin) * 2)
- .append('svg:g')
- .attr('transform', 'translate(' + (radius + margin) + ',' + (radius + margin) + ')')
- .call(tron.led);
逗号
分号
-
语句结束一定要加分号
-
- (function() {
- var name = 'Skywalker'
- return name
- })()
-
-
- (function() {
- var name = 'Skywalker';
- return name;
- })();
-
-
- ;(function() {
- var name = 'Skywalker';
- return name;
- })();
类型转换
命名约定
-
避免单个字符名,让你的变量名有描述意义。
-
- function q() {
-
- }
-
-
- function query() {
-
- }
-
当命名对象、函数和实例时使用驼峰命名规则
-
- var OBJEcttsssss = {};
- var this_is_my_object = {};
- var this-is-my-object = {};
- function c() {};
- var u = new user({
- name: 'Bob Parr'
- });
-
-
- var thisIsMyObject = {};
- function thisIsMyFunction() {};
- var user = new User({
- name: 'Bob Parr'
- });
-
当命名构造函数或类时使用驼峰式大写
-
- function user(options) {
- this.name = options.name;
- }
-
- var bad = new user({
- name: 'nope'
- });
-
-
- function User(options) {
- this.name = options.name;
- }
-
- var good = new User({
- name: 'yup'
- });
-
命名私有属性时前面加个下划线 _
-
- this.__firstName__ = 'Panda';
- this.firstName_ = 'Panda';
-
-
- this._firstName = 'Panda';
-
当保存对 this
的引用时使用 _this
.
-
- function() {
- var self = this;
- return function() {
- console.log(self);
- };
- }
-
-
- function() {
- var that = this;
- return function() {
- console.log(that);
- };
- }
-
-
- function() {
- var _this = this;
- return function() {
- console.log(_this);
- };
- }
存取器
- 属性的存取器函数不是必需的
-
如果你确实有存取器函数的话使用getVal() 和 setVal('hello')
-
- dragon.age();
-
-
- dragon.getAge();
-
-
- dragon.age(25);
-
-
- dragon.setAge(25);
-
如果属性是布尔值,使用isVal() 或 hasVal()
-
- if (!dragon.age()) {
- return false;
- }
-
-
- if (!dragon.hasAge()) {
- return false;
- }
-
可以创建get()和set()函数,但是要保持一致
- function Jedi(options) {
- options || (options = {});
- var lightsaber = options.lightsaber || 'blue';
- this.set('lightsaber', lightsaber);
- }
-
- Jedi.prototype.set = function(key, val) {
- this[key] = val;
- };
-
- Jedi.prototype.get = function(key) {
- return this[key];
- };
构造器
事件
模块
- 模块应该以
!
开始,这保证了如果一个有问题的模块忘记包含最后的分号在合并后不会出现错误
- 这个文件应该以驼峰命名,并在同名文件夹下,同时导出的时候名字一致
- 加入一个名为noConflict()的方法来设置导出的模块为之前的版本并返回它
-
总是在模块顶部声明 'use strict';
-
-
- !function(global) {
- 'use strict';
-
- var previousFancyInput = global.FancyInput;
-
- function FancyInput(options) {
- this.options = options || {};
- }
-
- FancyInput.noConflict = function noConflict() {
- global.FancyInput = previousFancyInput;
- return FancyInput;
- };
-
- global.FancyInput = FancyInput;
- }(this);
分享到:
相关推荐
9. ** Nashorn JavaScript引擎**:Java 8集成了Nashorn JavaScript引擎,允许Java代码直接执行JavaScript,促进了Java与JavaScript的互操作性。 10. **改进的枚举和注解**:Java 8对枚举和注解进行了增强,比如可以...
JavaScript中的NaN和Infinity是两个特殊的数值,它们在执行某些操作时返回,用以处理非数字值或无穷大的情况。...在JavaScript的未来发展中,这两个特殊值的处理方式可能会发生变化,开发者需要注意相关的规范和更新。
《Eloquent JavaScript》是一本深度探讨JavaScript编程的权威著作,其中文名译为“雄辩的JavaScript”。这本书全面覆盖了JavaScript的核心概念和技术,是初学者和经验丰富的开发者深入理解这门语言的重要资源。2021...
2. **JSON文件处理**:JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。在报告中,学生需要处理JSON文件,包括修复缩进错误,确保文件符合JSON规范,...
浏览器渲染机制异步编程:Promise和Async/Await入门[译]EventLoop[译]翻译Promise/A+规范从零到一实现完全符合Promise/A+的Promise手写Promise周边方法深入Async/Await底层实现Node.js中的EventLoop手写自己的HTTP...
良好的编程实践中,代码应遵循一定的命名规范,注释清晰,结构清晰,易于维护。此外,代码的可扩展性和可重用性也是衡量其质量的重要因素。 综上所述,这个PHP有道在线英译汉源码实例涵盖了PHP基础、HTTP请求、API...
2. 提交材料要求:包括服饰产品展示交互网页系统代码一套、提交符合规范的毕业设计论文一篇、外文文献翻译等。 五、主要参考文献: 1. [美]Tom Negrino Dori Smith 著.JAVAJavaScript 基础教程(第 8 版)(经典 ...
Material Design,中文译为“材料设计”,是由Google在2014年的I/O大会上推出的全新设计语言,旨在为Android、Chrome以及其他多平台提供一个统一且直观的视觉与交互体验。这个设计规范不仅影响了UI(用户界面)设计...
Ajax,全称为"Asynchronous JavaScript And XML",中文译为“异步的JavaScript和XML技术”,它是一种让Web应用程序实现更快、更友好的用户界面的技术。通过Ajax,浏览器无需重新加载整个页面,就能与Web服务器进行...
1. **XHTML语法规范**:这部分会详细讲解XHTML的语法规则,包括元素必须正确关闭、属性值需用引号包围、不允许使用内嵌的空格等。理解这些规则对于编写符合标准的XHTML文档至关重要。 2. **XHTML与XML的互操作性**...
中文译为“异步JavaScript和XML”。它通过浏览器与Web服务器之间的非同步HTTP请求来传递XML数据,使得网页只需要更新部分区域,而无需刷新整个页面,极大地提升了用户体验。 **Ajax的运行原理** 1. **用户交互**:...
这可能是由于JavaScript引擎的实现细节或者对规范的解释差异导致的。因此,在使用`concat`方法时,开发者应考虑到这个局限性,特别是在处理可能包含类数组对象的情况,以避免出现意外的结果。对于需要通用性的操作,...
JavaScript语法基于ECMAScript规范,最新版本为ECMAScript 2022。它的基础包括变量(var, let, const),数据类型(如字符串、数字、布尔值、null、undefined、对象等),控制结构(if...else、for、while、switch)...
项目可能遵循一定的文件结构规范,例如将JavaScript代码放在指定的js或src目录下,HTML和CSS分别放在对应的目录中,同时,可能存在构建脚本(如webpack配置)来管理和打包这些文件。 总的来说,"frontend-project-...
CSS中文译为“层叠样式表”,自1997年以来经历了多个版本的发展,包括CSS1(1997年)、CSS2(1998年5月)和CSS3(2005年12月)。每个新版本都引入了更多的样式控制和更先进的功能。 **CSS样式规则** CSS的样式规则...
"De facto standard",中文译为“事实标准”,是指在某个领域或行业中,尽管没有官方正式的标准,但因为被广泛接受和使用,实际上已经成为大家默认遵循的行为规范。这些标准通常是由于历史原因、市场占有率或是技术...
Lox是一种简单的、基于Rust编程语言设计的脚本语言,由著名编程书籍《你不知道的JavaScript》的作者Kent C. Dodds所创建。这个项目可能是为了教育目的,帮助读者理解和实现一种解释器的工作原理,因为它是“跟随手译...
另一个提及的工具是Autoprefixer(可能是"萨斯棉绒"的误译),它自动为CSS样式添加必要的浏览器前缀,以确保跨浏览器兼容性。这意味着开发者无需手动管理这些细节,Autoprefixer会自动处理。 在"angular-health-app...