Tracy JS 小笔记 - 运算符,条件语句,循环

运算符

  • + 数学运算和字符串连接, 任何数据加上字符串都等于字符串。
    var a = 1 + 1 + "a" + 1 + 2; (a="2a12")
    var a = 1 + 1 + "a" + (1 + 2); (a="2a3")
    var a = "aa" + true; (a= "aatrue")
  • +; -; *; /; %; = ; ()
    var a = 1 / 0; (a = NaN) NaN(Not a Number)代表非数,但是它是一个数字类型的值;
    凡是JS 觉得结果应该是一个数字,但是又不知道如何去表示的,就用 NaN 来代替;
    var a = b = 10; 赋值的顺序 自左向右; 运算的顺序 自右向左 特殊运算符特殊处理 : 优先级 = 最弱 () 最高;其他的是先乘除后加减
  • ++; --; +=; -=; *=; /=; %=
    var a = 1; console.log(a ++); 打印 1
    var a = 10; a += 10; (a:20)
    var a = 10; a += 10 + 1; (a:21) 相当于 先算右边 10 + 1 然后 a = a + 11;
    var a = 10; a += 10 + "1"; (a:"10101")
  • 较运算符 >; <;==; <=; <=; != 逻辑运算符结果为 boolean 值
    var a = 1 == "1"; (a = true;)
    var a = 1 == true (a = true)
    var a = 1 != true; (a = false)

    undefined == null; (true, 这是系统定义的,没有隐式转换规则)

    NaN == NaN; (false, 两边的东西一样的都相等, 除了这个特例, 非数不等于任何东西包括自己)

    {} == {}; (false 对象和对象之间比对的是放置对象地址的房间,这是俩房间不会相等的)
    引用值比对的事地址,地址一样才相等 var obj = {}; var obj1 = obj; obj1 === obj; (true 绝对相等,比的就是地址 无论是 == ===)
    var a = 1 > 2; (a = false)
    var a = "a" > "b"; (a = false; 字符串比的是 Ascii 码顺序)
    var a = "1" > "2" (a = false)
    var a = "10" > "2" (a = false, 就是说 它把十看成是一零, 1 和 2 比,有结果了之后压根不比后面的字了)
    var a = "1 刘飞" > "2 呵呵" (a = false 先从第一个开始比 ascii, 如果第一个字符已经分出高下,后面就不用比了);
    var a = 1 > "2"; (false 有数字参与比较的话,就会两边先隐式转换成数字)

    var a = false > true; (a = false, 用的是 0 和 1 来比)
    var a = 1> 2> 3; (a = false, 1>2 = false = 0; 0> 3 = false)
    var a = undefined > 0; undefined < 0; NaN> 0; NaN < 0; "123abc">0; "123abc"<0; (a=false; 相当于 先把 undefined 用 Number() 隐式转换成 NaN,它和 0 压根就没法比)
  • 逻辑运算符 && || ! 与或非 隐式转换用的是 Boolean()

    只有这六个值转换成 Boolean 值是 false, 其他全是 true : undefined, null, NaN, ""(空字符串), 0, false

  • var a = 表达式1 && 表达式2 && .... && 表达式n-1 && 表达式n
    && 与运算符:
    看第一个表达式 "表达式1" 转换成 boolean 值是否为真,如果结果为真那么往后看下一个表达试的结果,下一个是真就一直再往后看,直到 "表达式n-1" 也是真的话,就返回最后一个 表达式n 的值;
    如果第一个表达式为假,那么就直接返回第一个表达式的值
    如果第一个表达式为真,第二个表达式为假,就返回第二个表达式的值; 以此类推
    如: var a = 1 + 1 && "你好" && 3 -1; (a = 2;)
    2 > 1 && document.write("a"); 这样可以当做一个短路语句, 不关注返回值,只有在 2 > 1 条件成立的时候,才执行后面的语句。 实际用的时候,就是我们在接收后端传过来的数据的时候来做一个判断
    var data = "后端传过来的数据";
    data && 函数("data 的值是有意义的时候才执行这个函数");
    Tips: JS 里的 单个 & 也是与运算符,但是没有什么用,是来比二进制的东西,就知道 & 和 && 是不同的东西就行了, & 没有什么用.
  • || 或运算符
    参考&&运算符, 只不过它是相反的。 var a = 表达式1 || 表达式2 || .... || 表达式n-1 || 表达式n; 表达式1 是真的话就马上返回表达式1的值,不管后面了。 如果是假的话 就再看表达式2的情况。
    实际应用的情况是这样
    div.click = function (e) {
    //这个 e 在非 IE 浏览器是有值的,在IE 浏览器里是 undefined;
    // IE 浏览器下 想要得到和 e 一样的值 叫作 window.event; 而在其他浏览器下 window.event 的值是 undefined;
    //所以我们用这个方法来写兼容
    var event = e || window.event;
    }
  • ! 非 把表达式转换成 boolean 值然后取反,所以 ! 的结果一定是一个 boolean 值
    var a = !"123"; (a = false)
    var a = !!NaN; (a = false)
  • (,) 逗号操作符 要配合括号使用
    (a, b) 会返回 b 的值

    var num = 1,2; 不带括号的话,它会报错,因为它会识别成 var num = 1; var 2; 把 2 当成是变量声明了,语法混乱

条件语句 if; else if; else;

if 和 && 的互相转化
if ( 1 > 2) {...} === 1 > 2 && ...

条件补充语句 switch case; break; continue;

switch(a)
{
case 1: document.write ("a");
case "2": document.write ("b");
case true: document.write ("c");
}
switch 语句很不服责任,当 a = 1 的时候,它会继续执行下面的东西 也就是说它会打印 abc, 所以 switch 的每个 case 后要用 break 跳出来;

但是有时候特意不用 break, 要利用 switch 往下漏的原理实现多条件判断:
switch (data){
case "周一":
case "周二":
case "周三":
case "周四":
case "周五": document.write ("工作"); break;
case "周六":
case "周日": document.write ("休息"); break;
}

break: 终止循环,跳出 switch;
continue: 终止本次循环,进行下一次循环;

循环: for; while; do.. while

For 循环重点,执行顺序很重要

for ( var i = 1; i <= 10; i ++) {document.write ("a");}
// 执行顺序如下:
// 1. 先 var i = 0
// 2. 把中间的条件判断拿到 if 中 if ( i < 10 ) {document.write ("a");}
// 3. i ++;
// 4. 把中间的条件判断拿到 if 中 if ( i < 10 ) {document.write ("a");}
// 5. i ++;
// 6. 把中间的条件判断拿到 if 中 if ( i < 10 ) {document.write ("a");}
// 7. i ++;
.... 知道中间的 if 判断是 false 后,马上结束循环.

所以它相等于
var i = 1;
for (; i<= 10;){document.write ("a");
i++;
}
这里 for 循环的第一个表达式和第三个为空, 那就不执行了。

也等于如下: 只要我们掌握了执行顺序,就可以任意写了
var i = 1;
for (; i;) {document.write ("a");
i++;
if (i == 11) i = 0;
}

var i = 100;
for (;i--;){
//打印出来 100 到 1 的数字;
}

while 循环

for (; i < 10 ;) {for 循环第一个表达式和第三个表达式不写就是 while 循环, 也就是说 while 循环的底层方法就是for}
var i = 0; while (i<10) {巴拉巴拉; i++}

do .. while 循环

do {

//没人用,无论条件行不行,先循环一遍。
} while(条件)

For in 遍历对象

var person = {name:"tracy", sex:"girl"}
for(x in person) {//x 为属性名
console.log(x + person[x]);
//Tips 不能这么写,会报错: console.log(x + person.x);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值