01运算符
/*
运算符也叫操作符
通过运算符可以对一个或者多个进行运算
比如:typeof 就是运算符,可以来获得一个值的类型
它会将该值得类型以字符串的形式返回
number string boolean undefined object
算数运算符
当对非Number类型的值进行运算时,会将这些值转换为Number
任何值和NaN做运算都得NaN
+ +可以对两个值进行加法运算,并将结果返回。
如果对两个字符串进行加法运算,则会做拼串
会将两个字符串拼接为一个字符串,并返回。
任何值和字符串相加都会转换为字符串。
- -可以对两个值进行减法运算,并将结果返回。
* -可以对两个值进行减法运算,并将结果返回。
/ -对两个值进行除法
% -取模运算(取余数)
*/
var a = 123;
var result = typeof a;
result = 456;
result = true + false;
result = 2 + null;
result = 2 + NaN;
result = "123" + "456";
result = 100 - true;
result = 100 - '1';
result = 2 * 2;
result = 2 * '8';
result = 2 * undefined;
result = 2 * null;
result = 4 / 2;
result = 3 / 2;
/*
任何值做- * / 运算时都会自动转换为Number
我们可以利用这一特点做隐式的类型转换
可以通过为一个值 -0 *1 /1来将其转换为Number
原理和Number()函数一样,使用起来更加简单
*/
var d = '123'
d = d - 0;
console.log(d);
console.log(typeof d);
02一元运算符
/*
一元运算符,只需要一个操作数
+ 正号 正号不会对数字产生影响
- 负号 负号可以对数字进行负号的取反
对于非Number类型的值,
它会将先转换为Number,然后在运算
可以对一个其他的数据类型使用,来将其转换为number
它的原理
*/
var a = -123;
a = -a;
a = true;//boolean
a = -a;//number
console.log("a = "+a)
console.log(typeof a)
03自增或自减
/*
自增 ++
-通过自增可以使变量在自身的基础上增加1
-对于一个变量自增以后,原变量的值会立即自增1
-自增分成两种:后++(a++) 和前++(++a)
无论是a++还是++a,都会立即使原变量的值自增1
不同的是a++ 和++a的值不同
a++的值等于原变量的值,(自增前的值)
++a的值等于原变量新值(自增后的值)
自减--
-通过自减可以使变量在自身的基础上减1
-自减分成两种:后--(a--)和前--(--a)
无论是a-- 还是--a 都会立即使变量的值自减1
不同的是a-- 和 --a的值不同
a--是变量的原值(自减前的值)
--a是变量的新值(自减以后的值)
*/
var num = 10;
num--;
--num;
console.log(num--)
console.log(--num)
//console.log("num = "+num)
var a = 1;
// 使a自增1
//a++;
//++a;
//console.log(a++);//表达式的值
console.log('++a = ' + ++a);
console.log('a = '+a);
04逻辑运算符
/*
JS中为我们提供了三种逻辑运算符
! 非 -对一个值进行非运算,对值取反,true变false,false变true
-如果对一个值进行两次取反,它的值不变。
-如果对非布尔值进行元素,则会将其转换为布尔值,然后再取反。
所以我们可以利用该特点,来将一个其他的数据类型转换为布尔值
可以为任意数据类型取两次反,来将其转换为布尔值,
原理和Boolean()函数一样
&& 与 -&&可以对符号两侧的值进行与运算并返回结果
-两个值中只要有一个值为false就返回false
只要两个值都为true时,才返回true.
-JS中的“与”属于短路的与,
如果第一个值为false,则不会看第二个值
|| 或 -&&可以对符号两侧的值进行与运算并返回结果
-两个值只要有一个true,就返回true
-JS中的“或”属于短路的或,
如果第一个值为true,则不会看第二个值
*/
var a = true;
//对a进行非运算
a = !a;
//console.log("a = "+a);
var b = 10;
b = !b;
console.log("b = "+b);
console.log(typeof b);
05非布尔值的与或
/*
&& || 非布尔值的情况
-对于非布尔值进行与或运算时,
会先将其转换为布尔值,然后再运算,并且返回原值
-与运算:
-如果第一个值为true,则必然返回第二个值
-如果第一个值为false,则直接返回第一个值
-或运算
-如果第一个值为true,则直接返回第一个值
-如果第一个值为false,则直接返回第二个值
*/
06赋值运算符
/*
=
将符号右侧的值赋值给左侧的变量
+=
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
*/
var a = 10;
a +=5;
a -=5;
a *=5;
a /=5;
a %=5;
console.log(a);
07关系运算符
/*
通过关系运算符可以比较两个值之间的大小关系,
如果关系运算成立它会返回true,如果关系不成立则会返回false
> 大于号
-判断符号左侧的值是否大于右侧
-如果关系成立,返回true,如果关系不成立则返回false
>= 大于等于
-判断符号左侧的值是否大于或等于右侧的值
> 小于号
-判断符号左侧的值是否小于右侧
-如果关系成立,返回true,如果关系不成立则返回false
>= 小于等于
-判断符号左侧的值是否小于或等于右侧的值
非数值的情况
-对于非数值进行比较
-如果符号两侧的值都是字符串时,不会将其转换为数字进行比较
而会
*/
var result = 5 > 10;
result = 5 > 4;
result = 5 >= 5;
result = 5 >= 4;
result = 5 <= 5;
result = 5 <= 4;
console.log("result = "+result);
console.log(1 > true);//false
console.log(1 >= true);//true
console.log(1 > "0");//true
// 比较两个字符串时,比较的是字符串的字符编码
// console.log("a" < "b");//true
// 比较字符编码时是一位一位进行比较
// 如果两位一样,则比较下一位,所以借用它来对英文进行比较排序
// consloe.log("abc" < "bcd");//true
// 比较中文时没有意义
// console.log("哈" < "我");//true
// 如果比较的两个字符串的数字,可能会得到不可预测的结果
// 注意:在比较两个字符串的数字时,一定一定一定要转型
console.log("12345678900" < +"5")
08unicode运算符
<!-- 在网页中使用Unicode编码
&#编码;这里的编码需要的是10进制
-->
<h1 style="font-size: 200px;">☠</h1>
<h1 style="font-size: 200px;">അ</h1>
09相等运算符
/*
==来做相等运算
比较两个值是否相等
如果相等会返回true,否则返回false
!=来做不相等运算
比较两个值是否不相等
如果不相等会返回true,否则返回false
不相等也会对变量进行自动的类型转换,如果转换后相等它会
返回false
=== 全等 用来判断两个值是否全等,如果两个值类型不同,直接返回false
!== 不全等 用来判断两个值是否不全等,如果两个值类型相同,直接返回true
*/
console.log(1 == 1);//true
var a = 10;
console.log(a == 4);//false
/*
undefined 衍生自 null
所以这两个值做相等判断时,会返回true
*/
console.log(undefined == null);//true
/* NaN不和任何值相等,包括他本身 */
console.log(NaN == NaN);//false
var b = NaN;
// 判断b的值是否是NaN
//console.log(b == NaN);
/*
可以通过isNaN()函数来判断一个值是否是NaN
如果该值是NaN则返回true,否则返回false
*/
console.log(isNaN(b));
10条件运算符
/*
条件运算符 = 三元运算符
语法:
条件表达式?语句1:语句2;
- 执行的流程:
条件运算在执行时,首先对条件表达式进行求值,
如果该值为true,则执行语句1,并返回执行结果
如果该值为false,则执行语句2,并返回执行结果
如果条件表达式的求职结果是一个非布尔值,
会将其转换为布尔值然后在做运算
*/
// false?alert("语句1"):alert("语句2")
var a = 30;
var b = 50;
var c = 90;
//a > b ? alert("a大"):alert("b大")
// 获取a和b中的最大值
var max = a > b ? a : b;
console.log("max = "+max)
// 获取a b c中的最大值
max = max > c ? max : c;
console.log("max = "+max)
var max = a > b ? (a >c ? a : c) : (b >c ? b : c);
console.log("max ="+max)
11运算符优先级
/*
,运算符
使用,可以分割多个语句,一般可以在声明多个变量
*/
// var a=1,b=2,c=3;
// alert(a);
/*
就和数学中一样,在我们js中运算符也有优先级,
比如:先乘除,后加减
但是这个表我们并不需要记忆,如果遇到优先级不清楚
可以使用()来改变
*/
//var result = 1 + 2 * 3;
var result = (1 || 2) && 3;
console.log("result = "+result);