一、标识符与保留字
1.标识符
标识符是代码中用来标识变量、函数、或属性的字符序列
命名规则:
由字母、数字、下划线和$符号组成
不能以数字开头
大小写敏感(区分大小写)
ps:标识符不能和 JavaScript 其它关键字同名
2.保留字
在某种意思上是为将来的关键字而保留的单词。因此保留字不能被用作变量名或函数名。
3.属性命名
二、运算符与表达式
1.字面量(直接量)
表示自身的常量,不创建变量
2.运算符
逻辑、算数、比较、赋值。
逻辑运算符两边都是布尔类型时,&&:两侧都为真才为真,||两侧有一为真就为真
当两侧不是布尔类型时,首先将左操作数变成布尔,进行逻辑判断。
&&:左操作数为true,直接返回右操作数,左操作数为false,返回左操作数
||:左操作数为true,直接返回左操作数,左操作数为false,返回右操作数
3.短路原则的应用
a.
function area_of_circle(r,pi){
return r*r*(pi||3.14);
}
b.
function animate(param,speed,callback){
//do something
callback&&callback();//callback&& typeof callback==="function" &&callback()
}
提高函数的健壮性
4.++与--
++:递增运算符为其操作数增加1,返回一个数值
如果使用后置(postfix),即运算符位于操作数的后面(如 x++),那么将会在递增前返回数值
如果使用前置(prefix),即运算符位于操作数的前面(如 ++x),那么将会在递增后返回数值
--:为操作数减一,其他同
5.赋值运算符
基于右值给左值赋值,赋值表达式返回的值为右操作数
ps:1.多个赋值级联时的赋值传递规律
var a=b=5;//先执行b=5,在执行a=b,因为b=5,所以a=5
var a={n:2};//a指向一个地址内存放{n:2}
var b=a;//b指向a所指向的地址
a.x=a={n:1};//根据操作运算符的性质,先在a中拓展一个x,再根据赋值级联的复制传递规律得到a.x={n:1},
//又因为a改变了指向的地址,存放的数据为{n:1},但是原来b指向的不变
console.log(a.x);//undefined a已经更改了指向的地址,内部没有x
console.log(b);//{x:Object,n:2}
2.为避免=与==混淆可以反写,如:45=a;
6.表达式
表达式将产生一个值,用于需要值的地方
7.函数声明与函数表达式
function add(a,b,c){
return a+b;
}//函数声明
var a=function(a,b){
return a+b;
}//函数表达式
JavaScript 解析器识别函数声明的条件是以 function 关键字开始,只要在 function 关键字的前面有任何其他的元素,就会从函数声明转变为函数表达式。
8.立即执行表达式(IIFE)
写法:
(function foo(x,y){...}(2,3))//第一种
(function foo(x,y){...})(2,3)//第二种
//与运算符结合的写法
var i=function(){...}();
true&&function(){...}();
~function(arg1,arg2){...}(x.y);
!function(){...}();
a.通过对作用域的改变(限制变量声明周期),防止变量污染
三、语句
1.语句是为了完成某种任务而进行的操作,比如赋值语句
JavaScript 应用程序是由许多语法正确的语句组成的
JavaScript 语句是由 web 浏览器“执行”的“指令”
2.语句与表达式的区别
语句主要是为了进行某种操作,一般不需要返回值
表达式是为了得到返回值,一般会返回一个值
3.复合语句
JavaScript 中的多条语句联合在一起,形成一条复合语句
4.基本规则
语句以分号结束;语句块的结束不需要分号
5.遍历
for...in 常用来遍历对象 for k in obj
for...of 常用来遍历数组 for k of arr