目录
一、运算符(操作符)
计算运算符
赋值的顺序自右向左,计算的顺序自左向右。
括号:优先级最高
等号:优先级最低
加号、减号、乘号、除号:加号还有字符串连接的作用,任何原始值加字符串都返回字符串类型
摩尔:求余数
自加:自身加1再赋给自身,++位置不固定,放前面先自加再执行语句,放后面先执行语句再自加,同理还有自减
加等于:加任意数再赋给自身,优先级和等号一样,同理的还有减等于、乘等于、除等于和摩等于
> var a = 10;
> var b = ++a - 1 + a++;
> b + ',' + a
< "21,12"
> var a = 2;
> var b = a-- -1;
< 1
> a += 10 ---> a = a + 10
> a -= 10 ---> a = a - 10
> a *= 10 ---> a = a * 10
> a /= 10 ---> a = a / 10
> a %= 10 ---> a = a % 10
> a += 10 +1 ---> a = a + 10 +1
> var a = (10 * 3 -4 / 2 + 1) % 2, b = 3;
> b %= a + 3;
> console.log(a++)
> console.log(b--)
< 1
< 3
//交换a,b的值
> var a = 123,b = 234;
> a = a + b;
> b = a - b;
> a = a - b;
比较运算符
基本比较运算符:大于、小于、等于、大于等于、小于等于、不等于
消除隐式转换的比较运算符:绝对等于、绝对不等于
//基本比较运算符: >、 <、 ==、 >=、 <=、!=
//消除隐式转换的比较运算符:===、!==
var a = 1 == 2; // false
var a = undefined == undefined; //true
var a = Infinity == Infinity ; //true
var a = NaN == NaN; //false 非数是唯一一个自己也不等于自己的
//字符串比较的是ASCII码
逻辑运算符
逻辑运算符有与、或、非三种。
与运算符
与运算符连接表达式形成短路语句。当前表达式为true则继续看后面的,为false则中断并返回当前表达式的值。与运算符形成的短路语句是if语句的一种简写形式。
> var a = 1 && 2; //相当于if(1){ a = 2 }
> a
< 2
var a = 1 && 2 + 2; //结果:4
var a = 1 + 1 && 1 - 1 //结果:0
var a = 1 && true && 0; //结果:0
或运算符
或运算符连接表达式形成短路语句。当前表达式为false则继续看后面的,为true则中断并返回当前表达式的值。
> var a = 1 || 2;
< 1
//或运算符可以写兼容
div.onclick = function(e){
var event = e;//非ie
var event2 = window.event;//ie
var event3 = e || window.event; // ie和非ie都可以
}
// e是一个事件对象
// 非ie浏览器里面,var event = e 就可以取到e的值,
// ie浏览器中e里面没东西,但是window.event里面存放着和e相同的内容
非运算符
把对象转换成布尔值后取反。undefined、null、NaN、""(空串)、0、false 六个值转换的布尔值为false,其余所有转换的布尔值均为true。
> var a = !""
< true
> var a = !123
< false
> var a = !!""
< false
逗号运算符
逗号运算符可以将若干个表达式连接起来按顺序执行,并获得最右边表达式的值。它的优先级仅比等号高。
> var a = ( function f(){ return "1"} , function g(){ return 2 } )();
> a
< 2
> 1,2,3
< 3
typeof操作符
js中有六种数据类型分别是number、string、boolean、undefined、object、function。js是一门弱语言,声明变量时无需确定变量类型,js会在运行时自动判断。typeof运算符可以用来判断对象的类型,返回的是六种数据类型的字符串形式。typeof有两种形式,其一后面加括号,其二后面加空格。
//typeof除了后面加括号外后面还可以加空格作为运算符。
> typeof(123)
< "number"
// =>
> typeof 123
< "number"
> typeof("123") ---> "string"
> typeof({}) ---> "object"
> typeof([]) ---> "object"
> typeof(null) ---> "object"
> typeof(undefined) ---> "undefined"
> typeof(function(){}) ---> "function"
null虽是原始值,但用typeof检测的结果是object类型,这涉及到浏览器的一个历史遗留问题。最早null是以一种代替空对象的形式出现的,用来给对象占位。所以浏览器认为null是一个对象。
typeof是唯一一种使用未定义变量不报错的,打印结果为“undefined”。
typeof(a) ---> "undefined" //a没有声明,不会报错
console.log(typeof(typeof(a))) ---> "string "
二、条件语句
if语句
基于不同条件执行不同的动作。
if(true){
}
switch语句
基于不同条件来执行不同的动作。首先设置表达式n(通常是一个变量),随后表达式的值会与结构中的每个case值做比较(case里面可以放任何类型的值),如果存在匹配,则与该case关联的代码块会被执行。case语句执行完后会默认继续执行下一个case的代码块,需要使用break来跳出switch语句。使用default关键词来规定匹配不存在时做的事情。
//标准形式
switch(n){
case 1:
代码块; break;
case 2:
代码块; break;
default:
代码块; break;
}
switch(date){
case 1:
case 2:
代码块; break;
default:
代码块; break;
}
//case1和case2会都会执行表达式2,这种方式也是可行的,用来避免重复代码
三、循环语句
for循环
for循环共三个参数,第一个和第三个参数可以不放在for后面的括号中。第二个参数是一个表达式,只要对应的布尔值为true就可以执行循环体内的语句。
for(var i = 0; i < 10; i++){
}
//<=>
var i = 0;
for(; i < 10;){ //此时的for循环就相当于while循环
i++;
}
//要求打印出0-100?
var i = 101;
for(;i--;){
console.log(i);
}
//i等于0时,for循环停止
while循环
while循环的底层机制就是for循环,while循环是for循环的简化版。
while(){ } <=> for(; true; ){ } //while循环是for循环的简化版
> var n = 1;
> while( n-- ){
console.log(n);
}
//注意n--是在判断完表达式的布尔值后就执行,也就是说在第一次执行方法体之前就先执行了一次n--操作
< 0
do/while循环
do/while循环和while循环是一个机制,while循环是满足条件时执行,do/while循环不管是否满足条件,先执行一次,判断成立后再执行第二次。不推荐使用。
break和continue
break终止循环语句并跳出整个循环。continue终止本次循环并进入下次循环。break和continue必须放在循环里,否则报错。