基本概念

1.区分大小写

变量名linshui和LINSHUI代表不同的变量。

2.标识符(以及命名规范)

第一个字符必须是字母/下划线/美元符号

常用命名规范是驼峰法:也就是第一个字母小写,剩下单词首字母大写。比如firstPage

匈牙利命名法:变量名=属性+类型+对象描述.其中每一对象的名称都要求有明确含义,可以取对象名字全称或名字的一部分.但实际上这种在Js中很少见。

全小写。懒人写法。

私有变量写法一般是开头加下划线(_)。比如_totalNum

3.注释

常用的是单行 //这是注释

或者多行

/*
 *这是注释
 *这是注释
*/

对于方法而言,应该有更详细的描述。比如:

  /**
   * [methods description]
   * @type {Object}
   */

当然这更多的的是看个人爱好了,有些人还比较喜欢加上作者名以及修改时间等等。这都是方便自己或者他人阅读这份代码时,注释能够方便的让人理解这个函数是做什么的。

4.数据类型

javascript中有五种简单数据类型(基本数据类型):

Undefined //声明变量却没初始化时。它派生自Null。

Null //表示一个空对象指针 因此typeof null 结果是object.

Null的用处有时候用来释放被占用的内存。

Boolean

Number //NaN是一个特殊的数值。表示一个本来要返回操作数未返回值的情况。

String

以及一种复杂数据类型:

Object

这个在很多面试题中出现过。

关于Nubmer

把非数值转为数值。Number()parseInt()parseFloat()

一般常用的是parseInt()。为其加第二个参数,表明转为多少进制。

parseInt('1',2);//转为二进制
parseInt('1',16);//转为十六进制

与一个toFixed()函数。

var num = 10;
console.log(num.toFixed(2));//10.00

关于String

将非字符转为字符。一般.toString()String()

substr() substring()

大小写转换

toLowerCase()

toUpperCase()

charCodeAt()//将字符编码


console.log("z".charCodeAt());//122
console.log("h".charCodeAt());//104
console.log("a".charCodeAt());//97
console.log("o".charCodeAt());//111
console.log("y".charCodeAt());//121
console.log("i".charCodeAt());//105
console.log("n".charCodeAt());//110
console.log("g".charCodeAt());//103

fromCharCode() //接受一个或多个字符编码转为字符串

console.log(String.fromCharCode(122,104,97,111,121,105,110,103))//zhaoying

关于Object

对象是一组数据和功能的集合。

Object每个实例都有如下属性和方法:


constructor:保存着用于创建当前对象的函数。
比如 var zhaoying = new Object();
它的构造函数(constructor)就是Object()

hasOwnProperty(propertyname):用于检查给定的属性在当前对象实例(不是原型中)中是否存在.
比如你可以这么使用:zhaoying.hasOwnProperty("name");

isPrototypeOf(obejct):用于检查传入的对象是否对象的原型。

toLocaleString():返回对象的字符串表示.一般就是返回[object Object]

toString():返回对象的字符串表示.同上

valueOf():返回对象的字符串,数值或者布尔值表示。

操作符

一元操作符

前置操作符是在语句被求值之前改变的。

比如:

var Linshui  = 29;
console.log(Linshui); //29
var Zhaoying = --Linshui + 3;
console.log(Linshui);//28
console.log(Zhaoying);//31

后置操作符则是在语句被求值后执行。

比如:

var Linshui  = 29;
console.log(Linshui);//29
var temp = 4;
var Zhaoying = Linshui++ + temp;
console.log(Linshui);//30
console.log(Zhaoying);//33
var test = Linshui + temp;
console.log(test);//34

之后是比较重要几个规则:

1.包含有效数字字符串时,现将其转为数字,然后再执行加减操作。
2.不包含有效数字字符串时,变量设为NaN。
3.应用false时,转为0再执行加减操作。
4.应用true时,转为1再执行加减操作。
5.应用于浮点数值时,执行加减1操作。
6.应用于对象前,先用valueOf()取得值。然后应用之前规则。

来看一个比较详细的例子:

var s1 = '10';
s1++;
console.log(s1);//11

var s2 = 'ab10';
s2--;
console.log(s2);//NaN

var f = false;
f++;
console.log(f);//1

var t = true;
t--;
console.log(t);//0

var float = 2.5;
--float;
console.log(float);//1.5

var o = new Object();
o.s = "20";
o.s++;
console.log(o.s);//21

布尔操作数

逻辑非!

两个连续的逻辑非操作符模拟Boolean()转型函数的行为。

比如 !!"test" //true

逻辑与

属于短路操作,如果第一个操作数能决定结果,那么不会对第二个操作数进行求值。

比如

var linshui = true;
var zhaoying = (linshui && test);
console.log(zhaoying);//这行不执行,因为test未定义,linshui又是true,所以执行完linshui对test求值发现没定义

var linshui = false;
var zhaoying = (linshui && test); //跳过test求值阶段
console.log(zhaoying);//false