1). 除了加法以外,对非Number类型的值进行运算时,都会先转换为Number然后在做运算。 2). 而做加法运算时,如果是两个字符串进行相加,则会做拼串操作,将两个字符连接为一个字符串。 3). 任何值和字符串做加法,都会先转换为字符串,然后再拼串。 4). 任何值和NaN做运算都得NaN。
“ + ”:对两个值进行加法运算并返回结果 result = 456 + 789; result = "你好" + "大帅哥"; result = 123 + "1"; result = true + "hello"; result = 123 + ""; //空字符串转换为Number类型之后为0 “ - ”: 对两个值进行减法运算并返回结果 result = 100 - 5; result = 100 - true; //相当于100-1 “ * ”: 对两个值进行乘法运算并返回结果 result = 2 * 2; result = 2 * "8"; result = 2 * undefined; //undefined转换为Number类型之后为NaN result = 2 * null; //null转换为Number类型之后为0 “ / ”:对两个值进行除法运算并返回结果 result = 4 / 2; result = 3 / 2; “ % ”:对两个值进行取余运算并返回结果 result = 4 % 2; //输出结果为0 result = 3 % 2; //输出结果为1 “ ++ ”:自增可以使变量在原值的基础上自增1自增可以使用前++(++a)后++ (a++) 无论是(++a)还是(a++)都会立即使原变量自增1
不同的是(++a)和(a++)的值是不同的: (++a)的值是变量的新值(自增后的值),相当于已经执行两次(a++)
var a = 2; result = ++a; //输出结果为3a++的值是变量的原值(自增前的值)
var a = 2; result = a++; //输出结果为2 result = a++; //第二次执行输出结果才会为3 “ – ”:自减可以使变量在原值的基础上自减1自减可以使用前–(--a)还是 后–(a–) 无论是(–a)还是(a–)都会立即使原变量自减1
不同的是“ --a ”和“ a-- ”的值是不同的: –a的值是变量的新值(自减后的值),相当于已经执行两次(a–)
var a = 2; result = --a; //输出结果为1a–的值是变量的原值(自减前的值)
var a = 2; result = a--; //输出结果为2 result = a--; //输出结果为1一元运算符,相当于数学中将一个数值转换为正数或者负数,只需要一个操作数
正号:正号不会对数字产生任何影响。负号:负号可以对数字进行负号的取反 。1). 它会将先转换为Number,然后在运算。 2). 可以对一个其他的数据类型使用+,来将其转换为number。
! 非:可以用来对一个值进行非运算,所谓非运算就是值对一个布尔值进行取反操作,
类如:true变false,false变true
1). 如果对一个值进行两次取反,它不会变化。 2). 如果对非布尔值进行元素,则会将其转换为布尔值,然后再取反。 3). 所以我们可以利用该特点,来将一个其他的数据类型转换为布尔值。 4). 可以为一个任意数据类型取两次反,来将其转换为布尔值。
!true; //输出false !false; //输出ture&& 与:&&可以对符号两侧的值进行与运算并返回结果
1). 两个值中只要有一个值为false就返回false。 2). 只有两个值都为true时,才会返回true。 3). JS中的“与”属于短路的与,如果第一个值为false,则不会看第二个值。 4). 如果第一个值为false,则直接返回第一个值。
//如果两个值都是true则返回true var result = true && true; //只要有一个false,就返回false,所以下面三个的输出都是false result = true && false; result = false && true; result = false && false; true && alert("弹出框···");//第一个值为true时,才会检查第二个值,所以会输出后面的弹出框 false && alert("弹出框···");//第一个值为false时,不会检查第二个值,不会输出后面的弹出框|| 或:||可以对符号两侧的值进行或运算并返回结果
1). 两个值中只要有一个true,就返回true。 2). 如果两个值都为false,才返回false。 3). JS中的“或”属于短路的或。 4). 如果第一个值为true,则不会检查第二个值。 5). 如果第一个值为false,则返回第二个值。
//两个都是false,则返回false result = false || false; //只有有一个true,就返回true,所以下面三个的输出都是true result = true || false; result = false || true ; result = true || true ; false || alert("弹出框···");//第一个值为false时,则会检查第二个值,所以会有弹出框 true || alert("弹出框···");//第一个值为true,则不再检查第二个值,所以不会有弹出框对于非布尔值进行与或运算时,会先将其转换为布尔值,然后再运算,并且返回原值
通过关系运算符可以比较两个值之间的关系,如果关系成立它会返回true,如果关系不成立则返回false
“ > ”:大于号判断符号左侧的值是否大于右侧的值。“ >= ”:大于等于判断符号左侧的值是否大于或等于右侧的值。“ < ”:小于号判断符号左侧的值是否小于右侧的值。“ <= ”:小于等于判断符号左侧的值是否小于或等于右侧的值。 var result = 5 > 10;//false result = 5 > 4; //true result = 5 > 5; //false result = 5 >= 5; //true result = 5 >= 4; //true result = 5 < 4; //false result = 4 <= Na; //true1). 对于非数值进行比较时,会将其转换为数字然后在比较。 2). 如果符号两侧的值都是字符串时,不会将其转换为数字进行比较,而会分别比较字符串中字符的Unicode编码。 3). 相等运算符用来比较两个值是否相等,如果相等会返回true,否则返回false。 4). 任何值和NaN做任何比较都是false
console.log("1" < "5"); //true console.log("11" < "5"); //true //比较两个字符串时,比较的是字符串的字符编码 console.log("a" < "b");//true //比较字符编码时是一位一位进行比较 //如果两位一样,则比较下一位,所以借用它来对英文进行排序 console.log("abc" < "bcd");//true //比较中文时没有意义 console.log("戒" > "我"); //true //如果比较的两个字符串型的数字,可能会得到不可预期的结果 //注意:在比较两个字符串型的数字时,一定一定一定要转型 console.log("11123123123123123123" < +"5"); //true “ == ”:来做相等运算 当使用==来比较两个值时,如果值的类型不同,则会自动进行类型转换,将其转换为相同的类型然后在比较。 console.log(a == 4); //false console.log("1" == 1); //true console.log(true == "1"); //true console.log(null == 0); //false /* * undefined 衍生自 null * 所以这两个值做相等判断时,会返回true */ console.log(undefined == null); /* * NaN不和任何值相等,包括他本身 * 可以通过isNaN()函数来判断一个值是否是NaN * 如果该值是NaN则返回true,否则返回false */ console.log(NaN == NaN); //false “ != ”:不相等用来判断两个值是否不相等,如果不相等返回true,否则返回false。 使用 != 来做不相等运算不相等也会对变量进行自动的类型转换,如果转换后相等它也会返回false。 console.log(10 != 5); //true console.log(10 != 10); //false console.log("abcd" != "abcd"); //"abcd"转换为Number类型时为NaN,所以会输出false console.log("1" != 1);//false “ === ”:全等用来判断两个值是否全等,它和相等类似,不同的是它不会做自动的类型转换,如果两个值的类型不同,直接返回false。 console.log(123 === 123);//false console.log("123" === 123);//false console.log(null === undefined);//false “ !== ”:不全等用来判断两个值是否不全等,和不等类似,不同的是它不会做自动的类型转换,如果两个值的类型不同,直接返回true。 console.log("123" !== 123);//true console.log(null !== undefined);//true**语法:**条件表达式?语句1:语句2;
1). 条件运算符在执行时,首先对条件表达式进行求值: 2). 如果该值为true,则执行语句1,并返回执行结果; 3). 如果该值为false,则执行语句2,并返回执行结果; 4). 如果条件的表达式的求值结果是一个非布尔值,会将其转换为布尔值然后在运算。
var a = 300; var b = 143; a > b ? alert("a大"):alert("b大"); //因为字符串转Boolean类型会为true,所以 "hello"?alert("语句1"):alert("语句2");