Node.js建立在Google Chrome的V8引擎和他的ECMAScript之上。
1.弱类型
2.Buffer-Node.js特殊数据类型
3.对象字面量
4.函数
5.数组
6.原型特性
7.编码规范
JavaScript的基本类型:
1.String
2.Number
3.Boolean
4.Undefined
5.Null
6.RegExp
7.其他所有都是object
'a' === new String('a') //false
'a' === new String('a').toString() //true
'a' == new String('a') //true
==会进行自动类型转换,而===则不会
Buffer是Node.js中在4种基本数据(Boolean、String、Number和RegExp)之外添加的一种类型。
Buffer做数据存储非常高效,Node.js推荐在任何可以使用Buffer的情况下去使用他,如从文件系统中读取内容或者接收网络包内容等。
对象字面量相对比较而言是很简洁易读的:
var obj = {
color: "red",
type: "suv",
owner: {
...
}
}
记住,函数也是对象:
var obj = function (){
this.color: "red",
this.type: "suv",
this,owner: {
...
}
}
函数是“一等公民”,我们可以把他当作变量来使用,因为他们也是对象!是的,没错,函数也可以拥有属性和特性,
定义/创建函数
方式一:使用具名函数表达式
function f(){
console.log('Holle Word');
return true;
}
方式二:使用匿名函数表达式并赋值给一个变量
var f = function (){
console.log('Holle Word');
return true;
}
注意:这种方式定义必须在函数调用前完成,因为该方式并没有让函数预定义。
方式三:使用前两种方式的
var f = function f(){
console.log('Holle Word');
return true;
}
还可以给函数添加属性:
var f = function() {console.log('lijian');}
f.age = 1;
f();//输出lijian
console.log(f.age);//输出1
注意:关键字return是可选项,如果不被指定,函数在被调用后会返回undefined
JavaScript中的函数也是对象,所以我们可以把函数作为参数(Node.js中通常用作回调)传递给其他函数
var convertNum = function(num){
return num + 10;
}
var processNum = function(num, fn){
return fn(num);
}
processNum(10, convertNum);
数组也是对象,他从全局Array.prototype中继承了一些特殊的方法,然而,JavaScript数组并不是真正的数组,他们都是具有唯一角标的对象。
var arr = [];
var arr2 = [1, "Hi", {a:2}, function (){console.log('lijian');}];
var arr3 = new Array();
var arr4 = new Array(1, "Hi", {a:2}, function (){console.log('lijian');});
JavaScript中没有类的概念,对象可以直接从其他对象处继承,我们称之为原型继承。
JavaScript中有很多种类型的继承模式:
1.Classical
2.Pseudoclassical
3.Functional
下面是Functional继承模式的例子:
var user = function (ops){
return {firstName: ops.name || 'li'
,lastName: ops.name || 'jian'
,email: ops.email || '[email protected]'
,name: function () {return this.firstName + this.lastName}
}
}
var agency = function (ops){
ops = ops || {};
var agency = user(ops);
agency.customers = ops.customers || 0;
agency.isAgency = true;
return agency;
}
1.分号
以下两种情况必须要分号
1.1循环结构中:for(var i=0; i++; i
1.2以括号开头的一行中,如使用立即调用函数表达式的时候(IIFE)
;(function(){...}())
2.驼峰式
类首字母大写,其他变量名首字母小写
var MainView = Backbone.View.extend({...});
var mainView = new MainView();
3.命名
私有的方法和属性应以_开头
4.逗号
逗号先行
var obj = {firstName: "li"
,lastName: 'jian'
,email: '[email protected]'
}
5.缩进
通常可以使用1个tab、4个空格或者2个空格来进行缩进,
6.空格
一般情况下,在=、+、{和}符号前会加一个空格。方法调用时不加空格(如:arr.push(1);
),但是定义匿名函数的时候要加一个空格:function () {}