JS基础(2)

// == 表示值之间进行比较 === 不仅值进行比较,也做数据类型比较

var str1 = null;

var str2 = undefined;

console.log(str1 == str2);

console.log(str1 === str2);

//定义对象

//var obj; 这样子的定义方法是不对的

var obj = null; //这样才对

加法运算符的一些注意事项

非Number型 加法运算时  先转为number型在运算

var a = null;

console.log(a + 10);//null在 number型中 为 0

任何值与NaN运算 结果为NaN

var b = NaN;

console.log(b + 10); NaN

任何值和 字符串做 加法运算时,都先转为字符串,然后和字符串做拼串

var result = 10 + "abc";

console.log(result);

result = 1 + "true";

console.log(result);

// 减号与 加号 不同,仍然转为数值运算

console.log(10 - "123");

//字符串 作 乘法 也转为 NaN

var s1 = "123";

var s2 = "abc";

console.log(s1 * s2);//NaN

//分母为0 输出无穷大 Infinit

console.log(100 / 0);

//取余运算符 %  m % n  相当于 m / n 获取余数 

//n = 0 时  返回 NaN

//m = 0 时  返回 0

//n < m 时 正常取余 8 % 3 = 2

//n > m 时 返回 m  2 % 4 = 2

//一元运算符  无非就是 加号 和 减号

// 加号 不对数值产生 任何影响  对非number型 有了 加号  先转为number 然后在运算

var bool1 = true;

var res = +bool1;

console.log(res);

var str3 = "23";

var res1 = +str3;

console.log(res1);

var str4 = "as23";

var res2 = +str4;

console.log(res2);

//  负号  转为number型  同时也可 取反

console.log(1-"2"+3);

//赋值运算符 =  遵循右结合性

//a+=1  等价于 a = a + 1

//a*=1+2  遵循右结合性

var q = 5

console.log(q*=2+3);//25

//后缀表达式 i++  先用后增

var j = 10,k = 20;

console.log(j++ + k++,j,k); // 30 11 21

//前缀表达式  ++i 先增后用

var u = 10,i = 20;

console.log(++u + ++i,u,i);//32 11 21

//逻辑运算符

//与运算符  条件A && 条件B    一假则假

//先判断A  A不成立则直接输出false

result1 = true && true;

result2 = true && false;

console.log(result1,result2);

//短路测试

true && alert("I am coming!");

false && alert("I am not coming!");

//使用注意事项

//对于非Boolean型,逻辑与会自动转换为Boolean类型来判断

//条件A如果不成立 则返回条件A的数值本身

//如果A成立, 不管B成不成立,都返回条件B数值本身

var q1 = "123" && "abc";  //返回的是什么? true吗? 不是。  abc 

console.log(q1);

q1 = "123" && 0;

console.log(q1);

q1 = null && 0;

console.log(q1); //null

//逻辑或

// 条件A || 条件B 一真则真 全为false才返回false

//只要A成立,不去看B直接返回true 

//A不成立才判断B  B成立 返回true B也不成立时返回false

//短路测试

true || alert("I am coming!");  //不执行了

false || alert("I am not coming!");  //能够执行

//使用注意事项

//对于非Boolean型,逻辑或会自动转换为Boolean类型来判断

//条件A  如果不成立 不管B成不成立,都返回条件B数值本身

//如果A成立, 则返回条件A的数值本身

var q2 = null || 0;

console.log(q2);  //  返回0

q2 = "123" || "abc";

console.log(q2);  //123

q2 = "123" || "0";

console.log(q2);  //123

//逻辑非

//!条件A  对条件取反

var bool2 = true;

var w2    = !bool2;

console.log(w2);

//注意事项

//对一个值两次取反,它不会变化

bool2 = true;

w2    = !!bool2;

console.log(w2);  //true

//对非布尔型,会先转为布尔型 然后取反

    var q3 = "123";

    var w3 = !q3;

    console.log(w3);

    //所以除了Boolean()转布尔型还可以  !!数值 这样子来转布尔型

//              关系运算符 

/**

*  > < >= <= == != === !==  且均遵循左结合性

*  == 判断值 是否相等

*  !=判断值 是否不相等

*  === 判断值和类型 是否相等

*  !==判断值和类型 是否不相等

*/

//注意事项

//对于非数值进行比较  会将其转为数值然后在比较

var e1 = "123";

console.log(e1 < 120); //false

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

//如果符号两侧 均为 字符串 那么会比较的是 字符串中字符的 Unicode编码

console.log('a' > 'b');//false

console.log('abc' > 'abd');//比较方法 先比a 再比b 最后比c和d  所以结果为 false

//null undefined NaN 之间的比较

console.log(null == 0); //false

console.log(undefined == 0); //false

console.log(NaN == 0); //false

console.log(NaN == NaN);//false

//Why?

//判断这个数是否为NaN  isNaN()

var num = NaN;

console.log(isNaN(num));

console.log(null == undefined);//true

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

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

console.log("123" === 123);//false

//注意事项

//比较两个字符串型数字可能会得到不可预测的结果 所以比较前一定要转型呐 

//逗号运算符  将多个表达式连接起来组成一个表达式

  //a = 1 + 1,b = 3 * 4,c = 10 / 2;

  //运算过程  先算a  再算b 最后算c

  //整个逗号表达式的值是 最后一个表达式的值

  var x,y,z,v; //这个不是逗号表达式呐

  v = (x = 1 + 1,y = 3 * 4,z = 10 / 2);

    console.log(x);  //2

console.log(y);  //12

console.log(z);  //5

console.log(v);  //5


//三目运算符

//条件表达式?语句1:语句2;  一定有结果 真则执行语句1 假则执行语句2   

//条件运算符  ?和:  是一对运算符 不能单独使用

//如果条件表达式的求值结果是一个非布尔值 那么会先转为布尔值 在运算

"abc"?alert("hello"):alert("bye");  //hello

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容