标签:函数 布尔 逻辑 code 比较 meta 变量 ext 优先级
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script type="text/javascript">
typeof 的返回值是字符串,取值范围是{Number,Boolean,String,NUll,object,undefined}
1、 加法:(字符串相加比较特殊)
res = 1 + true; 2
res = 1 + null; 1
res = 1 + NaN; NaN 任何数与NaN运算都是NaN
res =‘123‘+ ‘456‘; "123456" 字符串拼接
res =123+ ‘456‘; "123456" 任何值和字符串相加,会先转成字符串后拼接
res = true + "123"; "true123"
res = null + ""; "null" 任何值加一个空串即可转换成字符串,底层是String()函数实现
res = 1 + 2 + ‘3‘; //33
res = ‘1‘ + 2 + 3; //123
console.log("res="+res);
2、 减法
res = 100 - ‘1‘; 99 字符串除了在加法中会转换成字符串,在其他运算符中会转换成数字
res = 100 * ‘1‘; 100 字符串除了在加法中会转换成字符串,在其他运算符中会转换成数字
res = 100 * undefined ; NaN undefined不是一个数,是一个NaN, 任何值和NaN运算都是NaN
res = 100 * null ; 0 null转换成0
任何值做 - * / 运算都会转成Number,利用这个可以做隐式类型转换
var a = ‘123‘; a = a -0; a = a /1; 此时a就变成数字了,底层原理和Number()函数实现
3、 一元运算符
+ 正号
- 负号
对于非Number值可以使用+将其转换成Number,- 也可以,不过会改变其值
var a = ‘123‘; a = +a; 此时a就变成数字了,底层原理和Number()函数实现
var a = 1 + +‘2‘ + 3; 6 +‘2‘ 正号把‘2‘转成Number 2了
4、自增自减
5、 逻辑运算符
<script type="text/javascript">
/*
* && || 非布尔值的情况
* - 对于非布尔值进行与或运算时,
* 会先将其转换为布尔值,然后再运算,并且返回原值
* - 与运算:
* - 如果第一个值为true,则必然返回第二个原值,因为其值有第二个值决定
* - 如果第一个值为false,则直接返回第一个值, 因为第二个已经不起作用,无论怎么样,都是false
*
* - 或运算
* - 如果第一个值为true,则直接返回第一个原值,因为第二个已经不起作用,
* - 如果第一个值为false,则返回第二个原值。因为其值有第二个值决定
*
*/
//true && true
//与运算:如果两个值都为true,则返回后边的
//var result = 5 && 6; 6
//与运算:如果两个值中有false,则返回靠前的false
//false && true
//result = 0 && 2; 0
//result = 2 && 0; 0
//false && false
// result = NaN && 0; NaN
// result = 0 && NaN; 0
//true || true
//如果第一个值为true,则直接返回第一个值
// result = 2 || 1; 2
// result = 2 || NaN; 2
// result = 2 || 0; 2
//如果第NaN一个值为false,则直接返回第二个值
//result = NaN || 1; 1
//result = NaN || 0; 0
// result = "" || "hello"; hello
//result = -1 || "你好"; -1
console.log("result = "+result);
6、 关系运算符
任何值和NaN比较都是false
//任何值和NaN做任何比较都是false
//console.log(10 <= "hello"); //false
//console.log(true > false); //true
//比较两个字符串时,比较的是字符串的字符编码
//console.log("a" < "b");//true
//比较字符编码时是一位一位进行比较
//如果两位一样,则比较下一位,所以借用它来对英文进行排序
//console.log("abc" < "bcd");//true
//比较中文时没有意义
//console.log("戒" > "我"); //true
//console.log("1" < "5"); //true
字符串数字是一位一位进行比较 1的ASCCI码小5的
//console.log("11" < "5"); //true
//如果比较的两个字符串型的数字,可能会得到不可预期的结果
//注意:在比较两个字符串型的数字时,一定一定一定要转型
console.log("11123123123123123123" < "5"); //true 97 < 100
console.log("11123123123123123123" < +"5"); //false 97 < 5
<=>
console.log("11123123123123123123" < 5); //false 97 < 5
在字符串中使用转义字符输入unicode 编码
\u四位16进制编码
console.log("\u2620"); //骷髅头
7、 相等运算符
相等,不比较类型,只比较值
当使用==来比较两个值时,如果值的类型不同,
则会自动进行类型转换,将其转换为相同的类型(数值型) 然后在比较
//console.log(true == "1"); //true
//console.log(null == 0); //false null未转化成0
/*
* undefined 衍生自 null
* 所以这两个值做相等判断时,会返回true
*/
//console.log(undefined == null);
NaN不和任何值相等,包括他本身
//console.log(NaN == NaN); //false
var b = NaN;
//判断b的值是否是NaN
//console.log(b == NaN); 不能这样判断b
/*
* 可以通过isNaN()函数来判断一个值是否是NaN
* 如果该值是NaN则返回true,否则返回false
*/
//console.log(isNaN(b));
8、不相等,不比较类型,只比较值
* 不相等用来判断两个值是否不相等,如果不相等返回true,否则返回false
* - 使用 != 来做不相等运算
* - 不相等也会对变量进行自动的类型转换,如果转换后相等它也会返回false
*
*
//console.log(10 != 5); //true
//console.log(10 != 10); //false
//console.log("abcd" != "abcd"); //false
//console.log("1" != 1);//false
* ===
* 全等
* - 先比较类型,再比较值
* !==
* 不全等
* - 用来判断两个值是否不全等,和不等类似,不同的是它不会做自动的类型转换
* 如果两个值的类型不同,直接返回true
//console.log("123" == 123);//true
//console.log("123" === 123);//false
//console.log(null == undefined);//true 不比较类型,* undefined 衍生自 null
//console.log(null === undefined);//false 类型不同
console.log(1 != "1"); //false
console.log(1 !== "1"); //true 类型不同
9、条件运算符
10、 运算符优先级
&& > ||
</head>
<body>
网页中使用Unicode编码

进制编码 2620的十进制是9760
<h1>☠</h1> 骷髅头
</body>
</html>
标签:函数 布尔 逻辑 code 比较 meta 变量 ext 优先级
原文地址:https://www.cnblogs.com/luoxuw/p/11439448.html