导航

(二).JavaScript的运算符和表达式,数据类型转化

Posted on 2022-04-10 22:03  云语不知  阅读(99)  评论(0)    收藏  举报

4. 运算符和表达式

4.3 赋值运算符和表达式

1.赋值运算符 = 
作用:赋值运算符就是将右边的内容赋值给左边的变量或属性。
    var result = 1 + 2;

2.复合赋值运算符 +=,-=,*=,/=
    var x = 0;
    var y = 1;
    x += y; //等价于 x = x + y;
    console.log(x);

4.4 条件运算符和表达式

条件运算符 条件表达式的结果一定是布尔值
    var a = 10;
    var b = 15;
1. > 大于 < 小于
    console.log(a > b);
    console.log(a < b);

2. >= 大于等于  <= 小于等于
    console.log(a >= b);
    console.log(a <= b);

3. == 等于 != 不等于
== 双等于会进行类型的隐式转换,比较两者是否相等
    a = 10;
    b = '10';
    console.log(a == b); //true
    console.log(a != b); //false

4. === 全等于 !== 不全等于
全等于会先判断两者的数据类型,不相同则直接返回false,否则继续比较是否一致
    console.log(a === b); //false
    console.log(a !== b); //true

4.5 逻辑运算符和表达式

①.逻辑运算符一般情况(逻辑运算符两边都是条件表达式)

逻辑运算符
  1. && 表示并且 全真为真,一假则假
  2. || 表示或者 全假则假,一真则真
  3. !  取反(true变false false变true)

    var height = 180;
    var weight = 70;
    // 全真
    console.log(height > 175 && weight < 80);//true
    weight = 81;
    // 一假
    console.log(height > 175 && weight < 80);//false

    // 一假
    console.log(height > 175 || weight < 80);//true
    // 全假
    height = 174;
    console.log(height > 175 || weight < 80);//false

②.逻辑运算符特殊情况(逻辑运算符两边有一边不是条件表达式)

逻辑运算符的特殊情况:逻辑运算符两边有一边不是条件表达式

    1. && 前面为真,结果为后面的值
          前面为假,直接返回前面的值,后面的表达式不执行
    2. || 前面为真,直接返回前面的值,后面的表达式不执行
          前面为假,结果为后面的值
    3. 注意点:值本身作为返回结果,不是值隐式转化的布尔值

    var a = 0;
    var b = 10;
    // 对于数字而言,0和NaN隐式转换成false,其他为true
    console.log(a && ++b); //0
    console.log(a || ++b); //11

    var c = '';
    var d = 'df';
    // 对于字符串而言,空串是false,其他为true
    console.log(c && d); //''
    console.log(c || d); //'df'

③.逻辑非

  // ! 非,表示取反
  // !就是将后面的布尔值值取反,不是布尔值的隐式转换成布尔值取反
  console.log(!true); //false
  console.log(!false); //true 
  console.log(!0); // true
  console.log(!NaN); //true
  console.log(!5); //false
  console.log(!''); //true
  console.log(!'df'); //false
  console.log(!'   '); //false

4.6 三元运算符和表达式

1. 一元运算符  ++ -- ! 
2. 二元运算符 + - * / % && || =(赋值运算符的优先级很低)
3. 三元运算符 flag ? x : y
   说明:flag 为真,执行x;flag 为假,执行y

    var a = 10;
    var b = 20;
    console.log(a > b ? a++ : b++); // 20  b=21

    b = 20;
    console.log('' ? a++ : b++);// 20 b=21

    b = 20;
    console.log(325 ? a++ : b++); //10 a=11

4.7 一元加法(值转换成数字)

当一个值前面出现 '+' ,代表将这个值转化成数字,转化失败返回NaN
console.log(+'45'); //45

4.8 运算符优先级问题

// 运算符的优先级问题
    // 乘除优先
    var a = 1;
    var b = 2;
    console.log(a + b * 3); // 7

// 自增自减优先级较高
    var c = 3;
    var d = 4;
    console.log(c + d++); //7

// 同优先级的运算符自左向右依次执行
    var e = 5;
    var f = 6;
    var g = 7;
    console.log(e + f - g); //4

5. 数据类型转化

5.1 数据类型的强制转换

①.其他类型转数字 Number()

1 字符串转数字
    var num = 'abc123'; //NaN(not a number):表示这不是一个数字,是一种类型
    num = '123456'; //123456
    num = '  123456'; //123456
    num = '123456  '; //123456
    num = '123 456'; //NaN
    num = ''; //0
    num = '    '; //0
    Number(num)

2 布尔值转数字
    num = true; //1
    num = false; //0
    Number(num)

3 undefined转数字
    num = undefined; // NaN
    Number(num)

4 null转数字
    num = null; //0
    Number(num)

总结:

字符串转数字:当一个字符串整体是一个数字时,可以直接转化出来,可以忽略字符串左右的空白,中间有空白不可以
            当一个字符串为空串或者空白串时,转出来都是数字0
            剩余情况下字符串都转化成 NaN
布尔值转数字:true时转为1,false时转为0
undefined转数字:NaN
null转数字:0

②.其他类型转字符串String()

无论什么数据类型转字符串,就是加上引号即可

③.其他类型转布尔值Boolean()

1 数字转布尔值
    var flag = 1; //true
    flag = 3; //true
    flag = -0.5; //true
    flag = 0; //false
    flag = NaN; //false
    Boolean(flag)

2 字符串转布尔值
    flag = "haha123"; //true
    flag = '  '; //true
    flag = '0'; //true
    flag = ''; //false
    Boolean(flag)

3 undefined转布尔值
    flag = undefined; // false
    Boolean(flag)

4 null转布尔值
    flag = null; // false
    Boolean(flag)

总结

数字转布尔值:除了0和NaN都是true
字符串转布尔值:除了空串其他都是true
undefined转布尔值:false
null转布尔值:false

5.2 数据类型的隐式转换

①.隐式转换发生在:数据的运算,比较,判等中

②.数据的判等 ==

1.先看两边是不是同一种数据类型,如果是,看值是否一致
2.如果不是,则两边同时转换成数字
    console.log(10 == 11); // false
    console.log('10' == 10); //true
    console.log(1 == true); //true
3.判等的特殊情况
    // 判等的特殊情况:null
    // null 与 0 不同
    console.log(null == 0); // false 
    // null 与 '' 不同
    console.log(null == ''); //false
    // null 与 false 不同
    console.log(null == false); //false
    // null 与 undefined 相同
    console.log(null == undefined); //true
    // null 与 null  相同
    console.log(null == null);//true

③.数据之间的运算和比较

1.数据的运算和比较正常都是转成数字
2.特殊情况:
    ①.+号左右存在字符串,就是拼接字符串
    ②.如果比较运算符左右都是字符串,比较的是ascll码的大小

④.NaN的特殊性

1.NaN与任何值判等都是不等
2.NaN与任何值比较大小,结果都是false
3.NaN与任何值运算,结果都是NaN,除了与字符串拼接
    console.log(NaN == NaN); //false
    console.log(NaN > 5); //false
    console.log(NaN < 5); //false
    console.log(NaN + NaN); //NaN
    console.log(NaN + 'hello'); //NaNhello

5.3 字符串当中提取数字

①.语法

 parseInt() 只取整数部分
 parseFloat() 不光要整数部分还要小数部分

②.要求

1.数字必须在字符串前面
2.可以处理前面的空格,无法处理中间的空格
    var str = '';
    str = 'aa123'; //NaN
    str = ' 123.9'; // 123 123.9
    str = ' 123. 9 ' //123 123
    console.log(parseInt(str));
    console.log(parseFloat(str));

③.应用范围

1.可以用于字符串取数字
2.可以用作小数取整

5.4 js常见的错误

console.log(b)
// ReferenceError: b is not defined 引用错误 b这个变量没有定义

console.log(‘’)
// SyntaxError: Invalid or unexpected token 语法错误 出现了非法的或者是不认识符号或者标识符
// 会有一个检查你代码语法的过程 如果不通过 一行代码都执行不了

a()
// TypeError: a is not a function 类型错误 a不是一个函数
// 错误的把一个变量当作函数来用了