JS-数据类型转换-运算符

数据类型转换-运算符

1 回顾

1.1 JavaScript 基本语法

1. JS 在 HTML 中的使用方式
   行内式
   内嵌式
   外链式
   
2. JS 中的注释
   //
   /**/
   
3. JS 严格区分大小写
4. JS 语句结束符: 分号或者是换行

1.2 变量

1. 数据、直接量、变量
   数据:计算机计算的就是数据,所有的信息通过数据来表示
   直接量:直接使用数据就是直接量
   变量:给数据取个名字,通过名字使用数据
   
2. 变量的意义
   方便多次重复使用某个数据
   变量可以把数据存储下来,保证下次使用的还是之前的数据
   
3. 变量的语法
   创建新的变量使用var
   可以只创建变量不赋值,也可以同时创建变量并赋值
   变量的值可以修改
   同时声明多个变量
   
4. 变量名的命名规范

1.3 数据类型

1. 分类:
   原始类型: number string boolean null undefined
   对象类型:
   
2. number 数值类型
   2.1 整型	十进制表示、八进制表示、十六进制表示
   2.2 浮点型	科学计数法	浮点型的计算存在精度问题
   2.3 NaN	  isNaN()
   2.4 数值的有效范围		Infinity -Infinity	isFinite()
   
3. string 字符串类型
   3.1 使用单引号或者双引号表示字符
   3.2 转义字符		\n  \\  \'  \"
   
   
4. boolean 布尔类型
   true
   false
   
5. null 和 undefined
   undefined 表示没有定义
   null 表示定义了值是空

2 数据类型转换

2.1 数据类型转换的规则

① 其他类型转为 number 类型
1. string 转为 number 类型的规则:
   ① 纯数字字符串会转为对应的数字,十六进制表示以及科学计数法表示的数字都是纯数字。
   ② 空字符串转为数字 0。 
   ③ 其他字符串转为 NaN。
   注意: string 类型数据在转为 number 类型数据的时候会自动去掉两端的空格,剩下部分按照以上规则进行转换
   
2. boolean 转为 number 类型的规则:
   true -> 1
   false -> 0
   
3. null 转为 number 类型的规则:
   null -> 0
   
4. undefeind 转为 number 类型的规则:
   undefined -> NaN
// 字符串转为 number 类型  使用 Number();
        var n1 = Number('hello');
        var n2 = Number('89.34');
        var n3 = Number('89abc');
        var n4 = Number('89.43e4');
        var n5 = Number('0x11');
        var n6 = Number('');   
        var n7 = Number('     ');   
        var n8 = Number('  101   ');   
        var n9 = Number('  10 1   ');   
        console.log(n1, typeof(n1));  // NaN number
        console.log(n2, typeof(n2));  //89.34
        console.log(n3, typeof(n3));  // NaN
        console.log(n4, typeof(n4));  //89.43e4
        console.log(n5, typeof(n5));  //17
        console.log(n6, typeof(n6));   // 0
        console.log(n7, typeof(n7));   // 0
        console.log(n8, typeof(n8));   // 101
        console.log(n9, typeof(n9));   // NaN
  // boolean 转为 number
        var v1 = Number(true);
        var v2 = Number(false);
        console.log(v1, typeof(v1));  // 1
        console.log(v2, typeof(v2));  // 0
 // null 转为 number
        var v3 = Number(null);
        console.log(v3, typeof(v3));  // 0
// undefined 转为 number
        var v4 = Number(undefined);
        console.log(v4, typeof(v4));  // NaN
② 其他类型转为 string 类型
数据长什么样就转为什么样的字符串
        var s1 = String(34.67);
        var s2 = String(true);
        var s3 = String(null);
        var s4 = String(undefined);
        console.log(s1, typeof(s1));  //34.67
        console.log(s2, typeof(s2));  //true
        console.log(s3, typeof(s3));  //null
        console.log(s4, typeof(s4));  //undefinded
③ 其他类型转为 boolean 类型
1. number 转为 boolean 类型的规则:
   0 和 NaN 转为 false,其他数字都转为 true
   
2. string 转为 boolean 类型的规则:
   空字符串转为 false,其他字符串都转为 true
   
3. null 转为 boolean 类型的规则:
   null -> false
   
4. undefeind 转为 boolean 类型的规则:
   undefiend -> false

总结: 0、NaN、空字符串、null、undefined 转为布尔值会转为 false,其他数据转为布尔值都是 true。

 0NaN、空字符串、null、undefined 转为 false,其他数据转为 true。
        console.log(Boolean(0));         //false
        console.log(Boolean(NaN));       //false
        console.log(Boolean(''));        //false
        console.log(Boolean(null));      // false
        console.log(Boolean(undefined));  // false

2.2 强制类型转换(显示转换)

① 强制把其他类型转为 number 类型的函数
Number()
parseInt()
parseFloat()

parsentInt()、parsentFloat 与 Number 的区别:

  1. parseInt() 和 parentFloat() 用于提取字符串的数字,所有非字符串类型得到的都是 NaN
  2. 纯数字字符串转为对应的数字;以数字开头的字符串转为开头的数字;其他字符串都是 NaN(空字符也是NaN)
		console.log(parseInt('123.34abc'));     //123
        console.log(parseFloat('123.34abc'));  //123.34
        console.log(parseInt(''));  // NaN

parseInt() 和 parsentFloat() 的区别:

  1. parseInt() 只能提取字符串中的整数部分。
  2. parentFloat() 可以提取字符串中的小数部分.
        console.log(parseInt('123.34abc'));     //123
        console.log(parseFloat('123.34abc'));  //123.34

注意:

  1. Number() 的转换规则此时标准的转换规则。
  2. 可以使用 parsetInt() 来对某个数字进行取整(会把小数部分舍去)。
② 强制把其他类型转为 string 类型的函数
String()
③ 强制把其他类型转为 boolean 类型的函数
Boolean()

2.3 自动类型转换(隐式转换)

  1. JavaScript 作为弱类型编程语言,支持数据类型自动转换。

  2. 数据参与运算,数据不符合运算所要求的类型,数据会根据运算要求的类型自动转换。

  3. 运算所要求的数据类型由运算符绝对。

  4. 自动类型转换的规则与强制类型(Number、String、Boolean)转换的规则是一样的。

 	'100' + 20       		10020		
  	false * 20    			0 		
  	undefined + 100		 	NaN100== 100			true	
  	false === 0   			false
  	null == undefined		true
  	200 !== 300				true
  	'abc' < 'b'   		    true  
  	100 > 20 && 1000        1000	    
 	+'hello'  				NaN		

3 运算符

3.1 运算符和表达式

① 运算符

运算符就是参与运算的符号,像+-*/ 等。

与运算符一起运算的变量、直接量、表达式称之为操作数

② 表达式
  1. 表达式是变量或者直接量与运算符组成的式子,表达式会有一个计算结果,称之为表达式的值,也就是说表达式是有值的。

  2. 最简单的表达式是"原始表达式", 如 直接量、 变量名、 关键字等。

  3. 复杂表达式由简单表达式组成, 运算符何以将简单表达式组合成复杂表达式。

  4. 注意带有副作用的表达式,这样的表达式除了有表达式的计算结果之外,还会对表达式中的变量产生影响。

3.2 运算符的分类

① 按照运算符需要的操作数的个数
一元运算符/一目运算符
二元运算符/二目运算符
三元运算符/三目运算符
② 按照运算符的功能
算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符、其他运算符

3.3 运算符讲解(按照功能)

① 算术运算符
运算符含义操作数个数操作数的类型要求组成的表达式的值的类型有无副作用
+加号2numbernumber
-减号2numbernumber
*乘号2numbernumber
/除号2numbernumber
%取余(取模)2numbernumber
+正号1numbernumber
-负号1numbernumber
++累加1numbernumber
累减1numbernumber

正号运算符:

通常会使用正号运算符来把其他类型的数据转为 number 类型,利用运算符自动类型转换。

		var msg = 'hello';
        console.log(+msg);  //NaN
        console.log(msg);   //hello

累加运算符和累减运算符:

累加和累减都是一元运算符,操作数必须以变量的形式表示,具有副作用。

累加和累减的符号可以在操作数的前面也可以在操作数的后面,对操作数产生的副作用是一样的,但是所组成的表达式的值不同。

运算符在操作前面: 表单式取操作数累加或累减之后的值作为表达式的值。

运算符在操作数后面:表达式取操作数累加或累减之前的值作为表达式的值。

        var num = 20;
        var res = (num ++) - (++ num) + (num --) - (++ num) + (num --);
        console.log(res);  // 20
        console.log(num);  // 21

// 定义变量
        var num = 20;
        // 20  num = 21
        // -
        // 22  num = 22
        // +
        // 22  num = 21
        // -
        // 22  num = 22
        // +
        // 22  num = 21
        var a = 20
        var res = (++ a ) - (a ++) || (a --) - (--a)
        console.log(res)    // 2
        console.log(a)      // 20 
② 关系运算符(比较运算符)
运算符含义操作数个数操作数的类型要求组成的表达式的值的类型有无副作用
>大于2number、stringboolean
>=大于等于2number、stringboolean
<小于2number、stringboolean
<=小于等于2number、stringboolean
==相等2number、其他类型boolean
!=不相等2number、其他类型boolean
===全等2所有类型boolean
!==不全等2所有类型boolean

两个操作数比较大小的规则:

  1. 如果两个操作的类型不一致,各自自动转为 number 类型进行比较。
  2. 如果两个操作数都是 string 类型,按照 string 类型比较大小的规则进行比较。
		console.log('a' < 'b');  // true
        console.log('A' > 'a');  // false
        在unicode 编码中,a=97,b=98,依次向上。A=65,B=66,依次向上

string 类型的数据比较大小的规则:

  1. 比较的是字符对应的 unicode 编码,unicode 编码是数字,可以比较大小。
  2. 字符串比较是按位一位一位的比较,如果一个操作数第一位的字符比另外一个操作第一位字符的unicode编码大,该操作整体都大。

相等和不相等的判断规则:

  1. 如果两个操作数类型不一致,自动转为 number 之后进行比较。
  2. 如果两个操作数类型一致,直接看是不是一样的。
 		console.log(0 == false);  //true
        console.log('' == false); //ture
        console.log(undefined == undefined);  // true
        console.log('hello' == 'hello');  // true

全等和不全等的判断规则:

  1. 如果两个操作数类型不一致,直接返回 false,不会进行自动类型转换的。
  2. 如果两个操作数类型一致,比较是否一样。
		console.log(true == 1);  // true
        console.log(true === 1);  // false

null 进行相等(==)判断的时候,非常特殊:

console.log(null == null);  	 // true
console.log(null == 0);     	 // false 
console.log(null == false); 	 // false
console.log(null == '');    	 // false
console.log(null == undefined);  // true 
③ 逻辑运算符
运算符含义操作数个数操作数的类型要求组成的表达式的值的类型有无副作用
&&逻辑与2任何类型取其中一个操作数作为表达式的值
||逻辑或2任何类型取其中一个操作数作为表达式的值
!逻辑非1booleanboolean

逻辑与组成的表达式的值的计算规则:

  1. 如果第一个操作数不成立,取第一个操作数作为表达式的值。
  2. 如果第一个操作数成立,取第二个操作数作为表达式的值。

逻辑或组成的表达式的值的计算规则:

  1. 如果第一个操作数不成立,取第二个操作数作为表达式的值。
  2. 如果第一个操作数成立,取第一个操作数作为表达式的值。
var n = 10;
        var res = n ++ || -- n;
        console.log(res);  // 10
        console.log(n);    // 11
 console.log(!true);  //false
        console.log(!false);  //ture
        console.log(!0);  //ture

④ 赋值运算符
运算符含义操作数个数操作数的类型要求组成的表达式的值的类型有无副作用
=赋值2无要求,左边的操作数必须是变量变量(左边操作数)的值作为表达式的值
+=赋值求和2无要求,左边的操作数必须是变量变量(左边操作数的值作为表达式的值
-=赋值求差2无要求,左边的操作数必须是变量变量(左边操作数的值作为表达式的值
*=赋值求积2无要求,左边的操作数必须是变量变量(左边操作数的值作为表达式的值
/=赋值求商2无要求,左边的操作数必须是变量变量(左边操作数的值作为表达式的值
%=赋值求余2无要求,左边的操作数必须是变量变量(左边操作数的值作为表达式的值
+=赋值连接2string,左边的操作数必须是变量变量(左边操作数的值作为表达式的值

总结:

  1. 赋值运算符要求左边的操作数必须是变量,右边的操作数变量、直接量、表达式都可以。
  2. 赋值运算符都有副作用,使用的就是赋值运算符的副作用,左边操作数会被修改。
  3. 赋值运算符组成的表达式以左边操作数为值(修改过后的)。
// 声明变量
        var num = 100;
        var age = 10;

        // 修改变量的值
        num = 200;
        num = 100 + 90;
        var res = (num = age);  
        console.log(num);  //10
        console.log(res);  //10
        console.log('');
        console.log('');
		num += 90;  //   num = num + 90
        console.log(num);  // 100

        num -= 10;   //  num = num - 10
        console.log(num);  // 90

        num *= 2;   // num = num * 2
        console.log(num);  // 180

        num /= 3; // num = num / 3
        console.log(num);  // 60
        
        num %= 9;  //  num = num % 9
        console.log(num);  // 6

⑤ 其他运算符
运算符含义操作数个数操作数的类型要求组成的表达式的值的类型有无副作用
typeof判断数据的类型1任意类型string
,逗号2
+字符串连接符2stringstring
?:比较运算符3任意类型取第二个操作数或者第三个操作数作为表达式的值

+ 符合具有3个含义:

  1. 如果操作数只有一个,+ 表示正号运算符.
  2. 如果操作数两个,且没有任何一个操作数是字符串,+ 表示加号。
  3. 如果操作数连个,只要有一个操作数是字符串,+ 表示字符串连接符。
 console.log( 100 + 23);        //123 
        console.log( 100 + '12');      //10012
        console.log( '100' + '12');    //10012
        console.log( true + false);    //1
        console.log('');
        console.log('');

?:三元运算符组成的表示的值的规则:

  1. 如果第一个操作数成立,取第二个操作数作为表达式的值。
  2. 如果第一个操作数不成立,取第三个操作数作为表达式的值。
		var res = 100 ? 20 : 10;
        console.log(res);              //20
        var res1 = null ? 100 : 200;
        console.log(res1);             //200

2.4 运算符优先级

1、 一元运算符: ++ -- ! typeof 
2、 乘除取余、加减
3、 关系运算符
4、 逻辑运算符
5、 赋值运算符
6、 ?:

注意: 使用 () 可以提高优先级。

var n = 100;
console.log(n ++ && n --);   101
console.log(n);              100
console.log(-- n || n ++);   99
console.log(n);              99 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值