操作符及类型转换
1.操作符
1.1.算数运算符
var num1 =10;
var num2 =5;
console.log(num1+num2);
console.log(num1-num2);
console.log(num1*num2);
console.log(num1/num2);
console.log(num1%num2);
- 进行数据运算是,除‘+’外,其他运算符可以自动将字符串数字隐形转成数字
var num1 ='10';
var num2 ='5';
console.log(num1-num2);
console.log(num1*num2);
console.log(num1/num2);
console.log(num1%num2);
1.2.一元运算符
JavaScript中有8种常用的一元运算符
运算符 | 描述 |
---|
+ | 将操作数转换成数字,字符串的拼接 | - | 将操作数转换成数字,同时变为负数 | ! | 逻辑取反运算符 | ++ | 递增 | - - | 递减 | delete | 删除数组或对象中特定索引的值 | typeof | 操作数放到typeof的后面,会返回当前操作数的类型,对于数值类型可以准确返回,对于引用类型,Function会返回’function’,其他都只会返回’object’ | void | void 运算符对任何值返回 undefined。 |
+ (正号)
1.’+‘的第一种用法:进行数据相加 2.’+‘放在数据的前面,就是取正数 3.’+'与字符串运算时,就是字符串连接符
var str1 = '123';
var str2 = 'world';
console.log(str1 + str2, typeof (str1 + str2));
4.’+'可以将数字字符串或布尔类型等隐式转换成number类型
var a = '123';
var b = true;
console.log(+a, +b, typeof +b);
-(负号)
1.正、负号可以对数字进行取正或取负, 其他运算符不能转换
var num1 =6;
var num2 =-6;
console.log(-num1);
console.log(+num1);
console.log(-num2);
console.log(+num2);
2.正、负号可以将字符串数字隐式转换成数字
var num1 ='6';
var num2 ='-6';
console.log(-num1);
console.log(+num1,typrof +num1);
console.log(-num2);
console.log(+num2, typeof +num2);
!(取反)
经常被用作条件判断时的取反操作,类型判断等,还可以用’!'将变量转换为Boolean类型
var a;
if (!a) {}
console.log(!null);
console.log(!undefined);
console.log(!'');
console.log(!100);
console.log(!'abc');
++(递增)
通常用于循环语句,动画操作等 ++放在前面 先累加,后赋值
var a;
var num =1
a=++num;
console.log(a);
console.log(num);
++放在后面 先赋值,后累加
var num1=0;
var b;
b=num1++;
console.log(b);
console.log(num1);
–(递减)
使用方法与++类似
delete
删除数组或对象中特定索引的值
var obj = {
name:'zhangsan',
age: 17
};
delete obj.name;
console.log(obj);
var arr = [1,2,3,4,5];
delete arr[2];
console.log(arr);
typeof
操作数放到typeof的后面,会返回当前操作数的类型,对于数值类型可以准确返回,对于引用类型,Function会返回’function’,其他都只会返回’object’
var obj = {
name:'zhangsan',
age: 17
};
var arr = [1,2,3,4,5];
console.log(typeof obj, typeof arr);
void
丢弃表达式的返回值,而返回undefined 使用方式有 void 表达式,void (表达式) 两种
1.3.赋值运算符
运算符 | 例子 | 等同于 |
---|
= | x = y | x = y | += | x += y | x = x + y | -= | x -= y | x = x - y | *= | x *= y | x = x * y | /= | x /= y | x = x / y | %= | x %= y | x = x % y |
= 赋值运算符向变量赋值。
var x = 7;
+= 赋值运算符向变量添加值。
var x =7;
x += 8;
-= 赋值运算符从变量中减去一个值。
var x = 7;
x -= 8;
*= 赋值运算符相乘变量。
var x = 7;
x *= 8;
/= 赋值运算符对变量相除。
var x = 7;
x /= 8;
%= 赋值运算符把余数赋值给变量。
var x = 7;
x %= 8;
1.4.比较运算符
比较运算符的优先级低于算术运算符,高于赋值运算符运算结果一般都为boolean
==
等同 的意思, 两边值类型不同的时候,要先进行类型转换为同一类型后,再比较值是否相等。
console.log(123 == 345);
console.log('123' == '345');
console.log(null == undefined);
console.log(123 == '123');
console.log(1 == true);
console.log(0 == false);
===
恒等 的意思,不做类型转换,类型不同的结果一定不等。
console.log(123 === '123');
console.log(123 === 123);
console.log(123 === 10 / 'a');
console.log('hello' === 'hello');
console.log(true === true);
console.log(1 === true);
console.log(null === null);
console.log(null === undefined);
双等和三等的区别
双等表示只要值相等即可为真,而三等则要求不仅值相等,而且也要求类型相同。 建议:尽量使用严格运算符 三等。因为"=="不严谨,可能会带来一些违反直觉的后果。
注意
1、对于string,number等基础类型,双等和三等是有区别的
1)不同类型间比较,双等之比较“转化成同一类型后的值”看“值”是否相等,===如果类型不同,其结果就是不等
2)同类型比较,直接进行“值”比较,两者结果一样
2、对于Array,Object等高级类型,双等和三等是没有区别的
进行“指针地址”比较
3、基础类型与高级类型,双等和三等是有区别的
1)对于==,将高级转化为基础类型,进行“值”比较
2)因为类型不同,===结果为false
!=
!= 和 ==用法类似 比较若类型不同,先偿试转换类型,再作值比较,最后返回值比较结果 。
!==
!== 和=== 用法类似 只有在相同类型下,才会比较其值。
‘>‘和’<’ 大于和小于
var a = 10;
var b = 20;
console.log(a > b);
console.log(a < b);
‘>=‘和’<=’ 大于等于和小于等于
var a = 10;
var b = 20;
console.log(a >= b);
console.log(a <= b);
非数值的情况下使用’>’’<’’>=’’<=’
对于非数值进行比较时,会先将其转换为数值,然后再进行比较。
console.log(1 > true);
console.log(1 >= true);
console.log(1 > '0');
console.log(1 > null);
console.log(1 > 'hello');
如果符号两侧都是字符串,不会将其转换为数值进行比较,而会分别比较字符串中字符的Unicode编码。 注意:所以在比较两个字符串型的数字时,一定要先转型。
console.log('134545353' > '5');
console.log('134545353' > +'5');
而在比较字符编码时,是一位一位进行比较的,如果符号两侧第一位一样,则比较下一位,所以借此可以用来对英文进行排序,而比较中文是没有意义的。
console.log('1' < '5');
console.log('11' < '5');
console.log('be' > 'b');
console.log('be' < 'b');
1.5.逻辑运算符
&& 与(同真才真,有假则假)
可应用于任意数值。如果有一个操作数不是布尔类型,逻辑与就不一定返回boolean类型
- 如果第一个操作数是null,NaN,undefined,false,0,""可被转换为false的值的时候返回该值
console.log(null && 'world');
console.log(NaN && 'world');
- 当第一个表达式为真,整个表达式的结果取决于第二个表达式,返回第二个表达式
console.log('hello' && 'world');
console.log(123&&345);
- 当第一个表达式为假,整个表达式的结果就可以确定,返回第一个表达式
console.log(false && 'world');
- [null,NaN,undefined,false,0,""]直接返回该操作数
console.log(''&&123);
console.log(0&&null);
console.log(123&&undefined);
||(有真才真,同假则假)
- 如果两个或多个操作数都是null,NaN,undefined,false,0,""可被转换为false的值的时候返回该值。
console.log(null || false);
- 如果第一个操作数是null,NaN,undefined,false,0,"" 则返回第二个操作数。
console.log(null || 'hello');
console.log(123||345);
!(NOT)
经常被用作条件判断时的取反操作,类型判断等,还可以用’!'将变量转换为Boolean类型
var a;
if (!a) {}
console.log(!null);
console.log(!undefined);
console.log(!'');
console.log(!100);
console.log(!'abc');
1.6.三目运算符
JavaScript中的三目运算符用作判断时
基本语法为: expression ? sentence1 : sentence2
当expression的值为真时执行sentence1,否则执行 sentence2
var age = 19;
var result = age > 16 ? "成年人":"未成年人";
2.类型转换
2.1.字符串类型
其他类型转换为String
toString()函数
? 除了null,undefined,其他三种基本数据类型的变量均有一个toString()函数,该函数可以获取该变量指定值的字符串表示。
var a = true;
var b = 123;
console.log(a.toString(), b.toString());
console.log(typeof a.toString(), typeof b.toString());
? 如果变量为number类型,默认情况下toString()是以十进制格式返回数值的字符串表示,通过传递参数,可以输入以二进制,八进制,十六进制乃至任意有效进制格式的字符串值
var num = 10;
console.log(num.toString());
console.log(num.toString(2))
console.log(num.toString(8))
console.log(num.toString(16))
? 任意其他数据与字符串相加都会转化为字符串
console.log(typeof (true + ''));
2.2. 布尔类型
其他数据类型转换为Boolean
Boolean()包装器
Boolean('hello')
使用!!转换任意其他数据类型都可以转换为布尔类型。
!!'hello'
2.3. 数字类型
其他数据类型转换为Number
Number()包装器
如果转换的值是null,undefined,boolean,number
Number(true);
Number(false);
Number(null);
Number(undefined);
Number(10);
如果转换的值是string
Number("123");
Number("234.1");
Number("+12.1");
Number("1+2.3");
Number("0xa");
Number("010");
Number("");
Number("123ac");
Number(12);
parseInt()函数
parseInt(10);
parseInt(10.3);
parseInt("123");
parseInt("234.1");
parseInt("+12.1");
parseInt("1+2.7");
parseInt("0xa");
parseInt("010");
parseInt("");
parseInt("1+2.3");
parseFloat()函数
parseFloat(10);
parseFloat("123");
parseFloat("234.1");
parseFloat("+12.1");
parseFloat("1+2.6");
parseFloat("0xa");
parseFloat("010");
parseFloat("");
parseFloat("1+2.3");
'+'号转换为数字类型
+"23"
+null
+undefined
|