<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <script> /* 运算符也叫操作符, 通过运算符可以对一个或多个值进行运算,并获取运算结果, 比如 typeof 就是运算符,可以来获得一个值的类型,它会将该值的类型以字符串的形式返回。 */ var a = 123; var result = typeof a; // number console.log(typeof result); // string /* 算数运算符,不会改变原变量,只会返回一个结果。 当非Number类型的值,会将这些值先转换成Number类型,再进行运算。 + - * / % */ /* + 可以对两个值进行加法运算,并把结果返回 */ result = a + 1; // result = 124 console.log(a); // 123 result = true + 1; // 2 result = true + false; // 1 result = 2 + null; // 2 // 任何值和NaN进行运算,都为NaN. result = 2 + NaN; // NaN // 如果对两个字符串进行加法,会进行拼串操作,并返回结果. result = "123" + "456"; // 123456 console.log(typeof result); // string // 任何的值和字符串做+运算,都会先转换为字符串,然后拼串. result = 123 + "1"; //1231 result = true + "hello"; // truehello // 可以将任意的数据类型转换为String,只需要为任意类型+ 一个""即可转换为String // 这是一种隐式的类型转换,有浏览器自动完成,实际上也是调用String()函数完成的. var c = 123; c = c + ''; // "123" console.log(typeof c); c = null c = c + ""; // "null" // 注意运算顺序 result = 1 + 2 + "3"; console.log("result =" + result); // "result = 33" result = "1" + 2 + 3; // "123" /* - 可以对值进行减法运算,并返回 */ result = 100 - 5 ; // 95 result = 100 - true; // 99 // 先转换成Number类型,再进行减法运算 result = 100 - "1"; // 99 result = "100" - "1"; // 99 /* *可以对两个值进行乘法运算 */ result = 2 * 2; // 4 result = 2 * "8"; // 16 result = "2" * "3"; // 6 result = 2 * undefined; //NaN result = 2 * null ; // 0 /* / 可以对两个值进行除法运算 */ result = 4 / 2; // 2 result = 3 / 2; //1.5 // 任何值做- * / 运算时都会自动转换为Number // 可以利用这一特点做隐式的类型转换,可以通过为一个值 -0 *1 /1 来将其转换为Number // 原理和Number()一样 var d = "123" d = d - 0; // typeof d 为number /* % 取模运算(取余数) */ result = 9 % 3; // 0 /* 一元运算符,只需要一个操作数 + 正号 - 正号不会对数值产生任何影响 - 负号 - 负号可以对数字进行符号的取反 - 对于非Number类型的值,先将其转换为Number,再运算。 */ a = 123; a = +a; // 123 a = -a; //-123 a = -2; a = +a; // -2 a = -a; // 2 a = true; a = -a; // -1 a = "18"; // typeof a => string a = -a; //-18 typeof a => number //将其他类型转换为Number,使用+ a = "18" // typeof a => string a = +a; // 18 typeof a => number result = 1 + "2" + 3; //"123" // 运算符的优先级 result = 1 + +"2" + 3; // 6 /* 自增++:通过自增可以使变量在自身的基础上增加1,对于一个变量自增以后,原变量的值会立即自增。 */ a = 1; a = a + 1; // 2 // 等同于 a++; ++a; // 自增有两种,后++(a++)和前++(++a)。 // 无论是a++,++a,都会立即使原变量的值自增1.不同的是,a++和++a的值不同. // a++ 的值等于自增前的值 // ++a 的值等于自增后的值 a = 1; console.log(a++); // 1 console.log("a = " + a); // "a = 2" a = 1; console.log(++a); // 2 console.log("a = " + a) // "a = 2" c = 10; c++; console.log(c++); // 11 console.log(c); // 12 var d = 20; console.log(++d); // 21 console.log(++d); // 22 // d++ 20 d 21 // ++d 22 d 22 result = d++ + ++d + d; console.log(result); //64 d = 20; //d++运行之后,d是21,d++是20,20赋值给d,d为20. d = d++; // 等价于 var e = d++; d = e; /* 自减-- 通过自减可以使变量在自身的基础上减1 自减分成两种,后--(a--)和前--(--a) 无论是a--还是--a,都会立即使原变量的值自减1,不同的是a--和--a的值不同. a--自减前的值 --a是自减后的值 */ var num = 10; num--; --num; /* JS中为我们提供了三种逻辑运算符 !非 可以用来对一个值进行非运算,不改变原变量,所谓非运算就是对一个bool值进行取反操作。true变false。false变true。 && 与 || 或 */ a = true; // 对a进行非运算 a = !a; // false // 如果对一个值进行两次取反,则不会变换。 a = !!a; // true // 如果对一个非bool值进行非运算,则会先转换为bool值,再取反。 b = 10; // number b = !b; // false bool // 可以利用该特点,将其他数据类型转为bool类型。可以为任意数据类型取两次反,转换为bool类型。 a = "hello"; // string a = !!a; // true boolean // && 与 // 可以对符号两侧的值进行与运算并返回结果 // 如果两个值都为true则返回true result = true && true; // true // 只要有一个false,就返回false result = true && false; // false result = false && true; // false result = false && false; // false // JS中的与属于短路与,如果第一个值为false,则不会再看第二个 // 第一个值为true,会检查第二个 true && alert('你看我出不出来'); //会弹框 // 第一个值为false,不会检查第二个 false && alert('你看我还出不出来'); // 不会弹框 // || 或 // 可以对符号两侧的值进行或运算并返回结果 // 如果两个值只要有一个true,则返回true。两个都为false,则返回false。 // 两个都是false,则返回false. result = false || false; // false result = true || false; // true result = false || true; // true result = true || true; // true // JS中的或属于短路或,如果第一个值为true,则不会看第二个。 // 第一个值为true,则不再检查第二个 true || alert("123"); // 第一个值为false,会检查第二个 false || alert("123"); // 会弹框 /* 对于非bool值进行与或运算: 非bool值的情况时,先将其转换为bool值,再运算,并且返回原值。 与运算: 如果第一个值为true,则返回第一个。 如果第一个值为false,则直接返回第一个值。 或运算: 如果第一个值为true,则直接返回第一个。 如果第一个值为false,则返回第二个。 */ // 与运算,如果两个值都为true,则返回后面的 // 与运算,如果两个值中有false,则返回false。 // true && true result = 1 && 2; // 2 result = 2 && 1; // 1 // false && true result = 0 && 2; // 0 result = 2 && 0; // 0 // false && false result = NaN && 0; // NaN result = 0 && NaN: // 0 // true|| true // 如果第一个值为true,则直接返回第一个值 result = 1 || 2; //1 result = 2 || 1; //2 result = 2 || NaN; result = 2 || 0; // 如果第一个值为false,则直接返回第二个值。 result = "" || "hello"; // "hello" result = -1 || "你好"; // -1 /* 赋值运算符 = 可以将符号右侧的值赋值给左侧的变量 += a += 5 等价于 a = a + 5; -= a -= 5 等价于 a = a - 5; *= a *= 5 等价于 a = a * 5; /= a /= 5 等价于 a = a / 5; %= a %= 5 等价于 a = a % 5; */ a = 123; // a = 123 a = a + 5; // 等价于 a += 5; a = a - 5; // 等价于 a -= 5; /* 关系运算符 通过关系运算符可以比较两个值之间的大小关系 如果关系成立,它会返回true,如果关系不成立,则返回false。 */ /* > 大于号 - 判断符号左侧的值是否大于右侧的 - 如果关系成立,返回true,如果关系不成立,则返回false。 */ result = 5 > 10; // false result = 5 > 4; // true result = 5 > 5; // false /* >= 大于等于 - 判断符号左侧的值是否大于或等于右侧的值 - 如果关系成立,则返回true。如果关系不成立,则返回false. */ result = 5 >= 5; // true result = 5 >= 10; // fals result = 5 >= 4; // true /* <= 小于等于 */ result = 5 <= 10; // true /* 非数值比较: 先转换成数值,再进行比较。 任何值和NaN进行任何比较都是NaN. 特殊情况,如果两边都是字符串,不会将其转换为数字进行比较,而会分别比较字符串中字符的Unicode编码。 */ console.log(1 > true ); // false console.log(1 >= true); // true console.log(1 > "0"); // true console.log(10 > null); // true console.log(10 > 'hello'); // false console.log(10 <= "hello"); // false console.log(true > false ); // true console.log("1" < "5"); // true console.log("11" < "5"); // true console.log(11 < "5"); // false console.log("a" < "b"); // true console.log("a" >= "b"); // false // 比较字符编码时,是一位一位进行比较 console.log("abc"< "b"); // true console.log("bbc" < "bb"); // false // 比较中文没有意义 console.log("戒" > "我"); // true // 如果比较的是两个字符串型的数字,可能会得到不可预期的结果,一定要转型!! console.log("1111111222" > "5"); // false // 可改为 console.log("1111111222" > +"5"); // true /* 相等运算符用来比较两个值是否相等,如果相等会返回true,否则返回false. 使用 == 来做相等运算. 当使用==比较两个值时,如果值的类型不同,将转换成相同的类型,再进行比较。 */ a = 10; console.log(a == 4); // false console.log("1" == 1); // true console.log(true == "1"); // true console.log(true == 'hello'); // false console.log(null == 0); //false /* undefined 衍生自null 所以这两个值做相等判断时,会返回true。 */ console.log(undefined == null); // true /* NaN 不和任何值相等,包括他本身 */ console.log(NaN == NaN); // false b = NaN; // 判断b的值是否是NaN /* 可以通过isNaN()函数来判断一个值是否为NaN 如果该值是NaN,则返回true,否则返回false。 */ console.log(isNaN(b)); // true /* != 不相等用来判断两个值是否不相等,如果不相等返回true,如果相等返回false。 不相等也会对变量进行自动的类型转换,如果转换后相等,它也会返回false */ console.log(10 != 5); //true console.log("abcd" != "abcd"); // false console.log("1" != 1); /* === 全等用来判断两个值是否全等,它和相等类似,不同的是它不会做自动的类型转换。 如果两个值的类型不同,直接返回false。 */ console.log("123" === 123); //false /* !== 不全等:用来判断两个值是否不全等,和不等类似,不同的是它不会做自动的类型转换。 如果两个值的类型不同,直接返回true。 */ console.log("1" !== 1); // true /* 条件运算符也叫三元运算符 语法: 条件表达式? 语句1:语句2 执行流程, 条件运算符在执行时,首先对条件表达式进行求值, 如果该值为true,则执行语句1,并返回执行结果 如果该值为false,则执行语句2,并返回执行结果 当返回的结果是个非bool值,会先将其转换为bool值,再进行运算。 */ true ? alert("语句1") : alert("语句2"); // 语句1 a = 10; b = 20; c = 50; a > b ? alert('a大'): alert('b大'); // b大 // 获取a和b中的最大值 var max = a > b ? a : b; console.log("max =" + max); // 获取a b c 中的最大值 max = max > c ? max : c; // 这种写法不推荐使用,不方便阅读 max = a > b ? (a > c ? a : c ): (b > c ? b : c) "hello"? alert('语句1'): alert("语句2"); // 语句1 ""? alert("语句1"): alert("语句2"); // 语句2 /* , 运算符 使用,可以分割多个语句,一般可以在声明多个变量时使用 */ // 使用 , 运算符同时声明多个变量 // var a , b , c; // 可以同时声明多个变量并赋值 // var a = 1, b = 2, c = 3; // alert(b); /* 就和数学中一样,在JS中运算符也有优先级, 比如: 先乘除 后加减 */ result = 1 + 2 * 3; // 7 /* 如果|| 的优先级高,或者两个一样高,则应该返回3 如果&& 的优先级高,则应该返回1 */ result = 1 || 2 && 3; console.log(result); // 1 /* 可以通过()来改变优先级 */ rsult = (1 || 2) && 3; // 3 </script> </head> <body> </body> </html>
来源:https://www.cnblogs.com/tumo/p/11431534.html