运算符(review)
发布日期:2022-02-08 04:20:55 浏览次数:2 分类:技术文章

本文共 5695 字,大约阅读时间需要 18 分钟。

隐式转换—在使用运算符进行运算或判断时,基本都涉及它。

在多种数据类型不同时,进行运算需要将这些数据转换为相同的。

一、算术运算符 “+”

  • 与字符相加:与字符相加后都是字符串,(隐式转换);后台打印都是黑色的啊;

    所以,转化字符串最快捷的方式是:变量+="";

    var str = “abc”;//测试的加数

    var char = “”;//空字符串
    var a = 11; // 11abc 11
    var a = true; //truabc true
    var a; //undefinedabc undefined
    var a = null; //nullabc null
    var a = {b:10};//[object Object]abc [object Object] 也是–>字符串相加
    var a = [1,2]; //数组-全部打印 1,2abc 1,2 也是–>字符串相加
    var a = NaN;//NaNabc NaN
    console.log(a+str); //字符串相加,首位相连
    console.log(a+char);

  • 与数值相加:(隐式转换)

    var num = 4;

    var a = 0;//4 数值+数值=数值
    var a =true; //5 true转化为数值为1
    var a = false; //4 false转化为数值为0
    var a;//NaN undefined转换为数值本来就是NaN
    var a = null;//4 null转换为数值为0
    var a = [1,2,3];//1,2,34 也是–>字符串相加
    var a = {b:3};//[object Object]4 也是–>字符串相加
    var a = NaN;//NaN (任何数值加NaN都是NaN)
    console.log(a+num);

  • 与布尔值相加:除字符、对象外,该布尔值转化为数值计算

    var bool = true;

    var a;//NaN undefined转化为数值为NaN
    var a = null;//1 a和bool都转化伪数值,相当于0+1
    var a = {b:1};//[object Object]true 也是–>字符串相加
    var a =[1,4,6];//1,4,6true 也是–>字符串相加
    var a= NaN;//NaN bool转成数值,数值+NaN=NaN
    var a = false;//1 false转成数值为0
    console.log(a+bool);

  • 与Object对象相加:都会转换成字符串相加

    数组是对象

    var obj={b:77};

    var a;//undefined[object Object]
    var a = null;//null[object Object]
    var a = {c:33};// [object Object][object Object]
    var a = [5,7];//5,7[object Object]
    var a = [];// [object Object] 空数组为空,没有元素
    console.log([]+[]);//数组是对象
    var a = NaN; //NaN[object Object]
    console.log(a+obj);

  • 特殊内容总结-------

    • 与NaN相加:
      数值+NaN=NaN(包括隐式转换成数值的)
      字符+NaN=字符串(任何内容+字符=字符串)
    • 与对象相加:
      内容+对象=字符串
    • 与数组相加:
      数组是对象,so :内容+数组=字符串
      (数组转换为字符串时是将数组的元素转换为字符串相连)
    • undefined与null:
      console.log(undefined+null); //NaN
      console.log(undefined == null); //true 都为空
      console.log(undefined===null); //false 类型不一样
减法 乘法 除法 取模% 转换为数值运算

与NaN做运算都为NaN(包括隐式转换成NaN的);

eg:console.log({a:1}-0); //NaN

赋值运算、一元运算

  • 赋值运算符:= += -= *= /= %= (常用)

    var a = 5; a +=""; //a快速转换成字符串

    var b = 3;
    var sum = b+=2;
    console.log(sum,b);//5 5

  • 一元运算符: - - ++

    var a = 1;

    console.log(++a,a++,a,); //2 2 3 a自增为2,++a的值为2;a++的值为2,然后a自增为3;输出a的值为3
    面试题1:
    var x = 1;
    var y = x++ + x + x++ + x++ + ++x; //从后往前划分容易
    console.log(x,y); //5 13
    x:2 2 3 4 5 x=5
    y:1+2+2+3+5=13

关系运算符: > < >= <= == === != !==

此 > < >= <= 判断结果是 boolean 值(能判断就判断大小,否则判断为false)
  • 判断字符串大小:字符的ASCII 或者 Unicode码值,依次比较

    var a = c = “aa5a”;

    var b = “a9b”;
    var d = “afc”;
    var x = “aA”;
    console.log( c );//aa5a 可以连等,最好别这么写
    console.log(a>b);//true 数字<字母(大写、小写)
    console.log(a>d);//false ASCII 字母靠后越大
    console.log(a>x);//true ASCII 小写字母>大写字母

  • 字符串与数值比较时,字符串转换为数值再比较

    console.log(“2a”>1);//false

    console.log(“2”>1);//true

  • 判断boolean大小,隐式转换为数值

    console.log(true>false);//true

    console.log(true>"");//true
    console.log(true>0);//true
    console.log(true>null);//true
    console.log(true>undefined);//false undefined转化为数值是NaN
    console.log(true>NaN);//false

  • 判断undefined与null

    console.log(undefined>null);//false

    console.log(undefined<null);//false
    console.log(undefined==null);//true 判读空的结果相同

  • 判断比较结果类型

    console.log(typeof({a:1}<{b:2})); //boolean

= 赋值;==比较;===精确比较,比较值和类型

console.log(“1”==1);//true

转化为数值,再进行比较

console.log("" == 0); //true

console.log(0 == false); //true
console.log("" == false); //ture
说明: 0 == “” == false
但是,console.log("" === false); //false ,一定要注意,类型不等

特殊情况:

console.log(undefined == null); //true ; undefined == null 判读空的结果相同
var a;
if(a == null){ // undefined 与 null
console.log(“aa”);//aa 被打印了
}
if(a == 0){
console.log(“a == 0”);
// a是 0 false “”
}

console.log(null == “”);//false

console.log(null == 0);//false
console.log(null == false);//false
null在设计上,在此处不尝试转型

NaN永远不和任何内容相等,包括NaN

var a = “a”;
if(a!=NaN) console.log(“dff1”); //dff1 最好使用最下面的方法来判断a与NaN
if(a == NaN) console.log(“dff2”);//未打印
if(NaN == NaN) console.log(“dff3”);//未打印
下面这种方法常使用:
if(isNaN(a)){
console.log(“非数值”);
// 判断a是否是NaN
//isNaN()里面的内容会 自动隐式转换为数值
}

对象的 " == " 判断

var obj = {a:1};
var obj1 = {a:1};
console.log(obj == obj1);//false 引用地址不同
console.log([]==[]);//false 数组也是对象,很明显,这是两个空数组

=== 、 != 的判断

console.log(“1” == 1);//true
console.log("1 "=== 1);//false 比较值和类型
console.log(0!=null);//true
console.log(0==null);//false null在设计上,在此处不尝试转型
console.log([]!=[]);//true

逻辑运算符: ! 、&& 、 || 有且仅有一个返回值

var a = 1;

console.log(0<a<10);//true 但最好别这么写
console.log(a>0 && a<10);//true 这么写比较好

true && true =true;

true && false =false;
false && true =false;
false && false =false;
true || true =true;
true || false =true;
false || true =true;
false || false =false;

  • && 先运行左侧,再运行右侧

    a="" && 1; //"" &&运算的两端,谁转换的布尔值先是false,就返回该值;

    a= 1 && “dshig”; //dshig 两端转换为布尔值都是true,就返回&&运算符右侧的值;
    console.log(a);
    面试题2
    var a=1;
    a=a-- && ++a; //1&&1 a=1
    s=–a && ++a; //0&& a=0 s=0
    c=++a && a–; //1&&1 a=0 c=1
    console.log(s,a,c); //0 0 1

  • || 先左后右

    var a=1,b=1;

    a=–a || a++; // 0||0 return 0 都错,返回右侧
    b=b-- || b++; // 1|| return 1 上来就1了,直接返回
    c=NaN || 0; // return 0 都错啊
    d=0 || NaN; // return NaN
    console.log(a,b,c,d);
    // 如果||的左侧的结果是ture,就直接返回左侧,不运算右侧;称这种现象为:熔断。
    -------对象中:-----
    var obj;
    console.log(Boolean(obj)); //false
    console.log(Boolean({}));//true
    console.log(obj || {}); //return {}
    var obj1={a:1};
    console.log(obj1 || {}); //return {a: 1}

  • ! (特殊) 取反值 先将内容转换为布尔值,再取反值,且 !得到的结果都是布尔值

    var obj={},obj1={};

    console.log(!10);//false
    console.log(!"");//true
    console.log(!obj1);//false
    console.log(obj1);//{}
    console.log(obj==!obj1);//false
    console.log(obj == obj1);//false 引用地址不同
    面试题3
    console.log(![] == []);//true false==""
    console.log([] == []);//false
    console.log([] != []);//true
    ------- ! 延伸---------
    var obj3;
    // 如果obj3是 “” 0 false undefined null NaN 这6种写法就可以进入条件,如:
    if(!obj){}
    if(obj3 == null){}
    if(obj3===null){
    obj3={c:3};
    }

三目运算符—条件运算符

格式:条件 ? 条件是true返回的结果 : 条件是false时返回的结果

面试题4—比较大小

var a=0,b=9,c=3;
// var max=a>b ? (a>c ? a : (c>b ? c : b)) : b>c ? b : (c>a ? c : a);
var max=a>b ? (a>c ? a:c):(b>c ? b:c);
console.log(max);//9
var s=3>5 ? false : true;
console.log(s);//true

转载地址:https://blog.csdn.net/weixin_43297321/article/details/103756725 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:js数据类型转换(reset)
下一篇:**kwargs *args

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2024年03月07日 02时57分49秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

mysql忽略大小写jpa解决_JPA 大小写敏感问题 2019-04-21
MySQL5.7 固态盘性能设置_MySQL 5.7 安装完成后,立即要调整的性能选项 2019-04-21
idea java web mysql_解决idea中javaweb的mysql8.0.15配置问题 2019-04-21
mysql.net 环境配置_windows环境下下安装配置mysql5.7.24 2019-04-21
servlet对象是在服务器端还是在客户端被创建?_Servlet编程之会话管理 2019-04-21
sqoop mysql hadoop_如何将mysql数据导入Hadoop之Sqoop安装 2019-04-21
webpack卸载_webpack的安装 2019-04-21
mysql主库线程_MySQL 主从扩展--主库的线程状态 2019-04-21
phpmyadmin管理mysql_LAMP实验二:使用phpMyAdmin管理MySQL 2019-04-21
mysql一秒最多写多少次_Mysql的两种“超过多少次”写法(力扣596) 2019-04-21
mysql el函数_MySQL中的常用函数 2019-04-21
mysql 备份 晓燕_mysql字符串函数 2019-04-21
mysql返回第n个值_获取mysql一组数据中的第N大的值 2019-04-21
java读文件几种方式_JAVA读取文件的几种方式 2019-04-21
java arraylist常用方法_C#中数组、ArrayList、List、Dictionary的用法与区别浅析(存取数据)... 2019-04-21
如何实现java文档注释_JavaDoc注释与帮助说明文档 2019-04-21
Java一亿电话号码去重_20 亿个数字在 4G 内存中如何去重排序:快来试一试 BitMap... 2019-04-21
java判断ipv6地址类型_IPv6地址类型与格式 2019-04-21
linux java jdk_linux安装JDK 2019-04-21
java的showcase_java – 如何在Eclipse中导入ShowcaseView? 2019-04-21