1.字符串转整数
parseInt()
方法
使用 parseInt()
方法,参数为字符串,结果为该字符串转换而来的整数;
转化规则是:如果字符串的首字符不是一个数字,转换失败,返回 NaN;否则,转换到字符串中第一个不是数字的字符止,即,遇到字母、小数点下划线等字符立即停止转换。需要注意的是,16 进制的符号 0x 不会让转换停止。parseInt()
还可以有第二个参数,表示待转换字符串的进制。下面给一些例子:
parseInt("12");
parseInt("12.2");
parseInt("C",16);
parseInt("12a2");
parseInt("0XC"); //以上均返回数字12
parseInt("a12"); //失败
Number()
使用 Number() 转换一个字符串,这个字符串必须是只含有数字的字符串,即数字的字符串形式。
Number("12"); //返回12
Number("12a2"); //返回NaN
Number(""); //返回0
2.字符串转小数
字符串转小数也有两种方式:parseFloat()
和 Number()
。
parseFloat()
方法只转换到字符串中第一个不是数字的字符为止,当然这个字符不包括第一个小数点。
parseFloat("12"); //返回12
parseFloat("12.2a"); //返回12.2
parseFloat("12.2.2"); //返回12.2,第二个小数点会让转换停止
parseFloat(null); //返回0
3.数字转字符串
toString()
实现一般的数字转字符串,String()
则是强制类型转换
toString()
括号内有一个可选的参数,指以几进制的形式转换该字符串,如数字12调用 toString(16)
得到的结果就是 C,即12的16进制表示方式。
varmyNum=15;
console.log(myNum.toString()); //输出"15"
console.log(myNum.toString(16)); //输出"F"
console.log(String(myNum)); //输出"15"
String()
可以转换 null 和 undefined,而 toString()
不可以。
varmyNum=15;
console.log(myNum.toString()); //输出"15"
console.log(myNum.toString(16)); //输出"F"
console.log(String(myNum)); //输出"15"
4.布尔型与其他类型的相互转换
- 布尔型转为字符串直接就是字符串 true 或者 false;
- 布尔型中的 true 转换为数字 1,布尔型中的 false 转换为数字 0;
- 数字 0、null、undefined、空字符串转换为布尔型的 false,其他所有都是转换为 true。
varmyBool=ture;
myBool.toString(); //返回"true"
Number(true); //返回1
Boolean("js"); //返回true
Boolean(""); //返回false
5.+ - * / %
运算符
JavaScript
中的加号除了具有数学中将两个数字相加的作用外,还能对字符串做连接操作。
对两个数字相加和数学中一样,字符串相加就是拼接字符串的意思,比如Java+Script
的结果是字符串JavaScript
。
当字符串和数字相加时需要进行类型转换,数字会先转为字符串,然后再做字符串的拼接。
JavaScript
中的比较运算符有==
,===
,>
,<
,!=
,>=
等。
==
叫做相等,===
叫做严格相等。双等号和三等号的区别是:三等号要求数据类型和值都相等,双等号只需要值相等即可,相等包含严格相等。
严格相等先比较两个对象的数据类型是否相等,不相等则结束比较,返回false
,如果相等在数据类型不同时,尝试进行数据类型转换,例如,在字符串和数字的比较中,字符串会被转为数字再比较;布尔值true
转为数字1
,布尔值false
转为数字0
。
如果数据类型相同,相等和严格相等都会直接比较值,值相等返回true
。
需要特别注意的是,以上仅仅适用于非对象类型。对于对象类型,相等或者严格相等比较的都是对象的引用,而不是具体的值,就是说,一个对象和其他任何对象都是不相等的,即使两者属性、值都相等。
varstringVariable="2";
varnumber1=2;
varnumber2=2;
console.log(stringVariable==number1);//true
console.log(stringVariable===number1);//false
console.log(number1===number2);//true
varstudentA= {
name:"Bob",
age:22
}
varstudentB= {
name:"Bob",
age:22
}
console.log(studentA==studentB);//false,因为不是同一个对象
varstudentC=studentA;
console.log(studentA==studentC);//true,因为是同一个对象
将studentA
赋值给studentC
,这时studentC
和studentA
指向内存中的同一个地址块,视为同一个对象,所以两者相等。
- 不等对应于上面的等号,不等号也有两种:
!=
和!==
。!=
和==
互为相反,==
成立,!=
一定不成立。!==
和===
互为相反,严格相等成立,则严格不相等不成立。 - 其它大于,小于,大于等于,小于等于的比较规则如下:比较的两个对象都是数字,按照数学中数字的比较方法。数字和字符串比较,字符串转为数字后再比较。字符串和字符串比较,从第一个字符开始,逐个比较,发现不相等立即返回。字符按照
ASCII
编码值的大小比较,一般只要记住:数字<大写字母<小写字母,字母a
小于字母z
,A
小于Z
, 比较过程中,当一个字符串结束另外一个字符串还有,还没有比较出大小,则长的字符串较大。
varnumber1=1;//定义变量number1
varnumber2=2;//定义变量number2
varstring1="3";//string1
varlowerLetter="a";//定义变量lowerLetter
varupperLetter="A";//定义变量upperLetter
varstring1="aa";//定义变量string1
varString2="ab";//定义变量String2
console.log(number1<number2);//输出true
console.log(number2<string1);//输出true
console.log(upperLetter<lowerLetter);//输出true
console.log(lowerLetter<string1);//输出false
console.log(string1<string2);//输出true
6.逻辑运算符
在介绍逻辑运算符之前,我们必须明确逻辑运算符的操作数只能是布尔型,其他类型都会被转换为布尔型:除了0
,null
,undefined
,""
外,其他的值转换为布尔值都是true
。
- 逻辑与逻辑与有两个操作数,中间用
&&
连接,只有两个操作数都是true
结果才是true
; 其中一个操作数不是布尔型,当左操作数为真值时,返回右操作数。当左操作数为假值时,返回左操作数。 - 逻辑或逻辑或同样有两个操作数,用
||
连接,至少有一个操作数为true
时结果为true
; 其中一个操作数不是布尔型,当左操作数为真值时,返回左操作数。当左操作数为假值时,返回右操作数。 - 逻辑非逻辑非只有一个操作数,
!
后连接操作数或表达式,意思是将操作数取反;如果操作数不是布尔型,编译器首先将其他类型转换为布尔型,然后返回true
或者false
。
console.log(true&&false);//false
console.log(true||false);//true
console.log(!false);//true
var number1 = 1;
var number2 = 0;
var string = "a";
console.log(number1&&string);//输出字符串"a"
console.log(number1||string);//输出数字1
console.log(!number1);//false
7.条件运算符(就是java中的三元运算符)
条件运算符由?
和:
构成,三个操作数分别在?
的左边、右边以及:
的右边,第一个操作数如果是真值,整个表达式返回第二个操作数的值;第一个操作数如果是假值,返回第三个操作数的值。
一般我们说到JavaScript
中的三元运算符,指的就是条件运算符,因为它有三个操作数。条件运算符通常用来简化表达式。
var result1 = a>b?a:b;//result1赋值为a和b中大的那一个
var result2 = (a==5)?(a+1):(a-1);//a为5,返回a+1,否则返回a-1
8.赋值运算符(没什么新东西)
赋值运算符就是=
号,其实这个在前面出现过很多次了。赋值运算符的左边是一个变量或者对象的属性,右边是这个变量的值,意思是设置左边变量的值为右边的具体值。
除了基本的等号外,赋值运算符还可以和算术运算符结合。例如a+=1
表示a=a+1
,其中就把相加和赋值结合了起来。同理,相减、相乘、相除、取余、位运算都可以和赋值结合起来。如下:
var b = 1;
b += 1;//等价于b = b+1
b *= 1;//等价于b = b*1
b /= 1;//等价于b = b/1
b %= 1;//等价于b = b%1
b &= 1;//等价于b = b&1
9.运算符的优先级
JavaScript
中运算符的优先级和数学中运算符的优先级意思相同,优先级高的运算符比优先级低的运算符先计算,例如数学中1+2*3
算式,先计算2*3
,结果再与1
相加,所以乘法的优先级高于加法,在JavaScript
中,不同的优先级也是这个作用。
下面是常见的运算符的优先级:
分类 | 运算符 | 含义 | 结合性 |
1 | ++ | 前后增量 | R |
1 | -- | 前后减量 | R |
1 | ! | 逻辑非 | R |
2 | * / % | 乘 除 求余 | L |
3 | + - | 加减 | L |
4 | < <= > >= | 比较数字顺序 | L |
4 | in | 测试属性是否存在 | L |
5 | == | 判断相等 | L |
5 | != | 判断不等 | L |
6 | & | 按位与 | L |
7 | && | 逻辑与 | L |
8 | ?: | 条件运算符 | R |
9 | = | 赋值 | R |
9 | += -= *= /= %= | 运算且赋值 | R |
10 | , | 忽略第一个操作数 | L |
从上到下优先级逐渐降低。第一栏数字相同的运算符优先级相同,
加减乘除的优先级高于比较运算符,赋值运算符的优先级几乎是最低的
var a = 1;
var b = 2;
var c = ++a+b;
因为
++
的优先级高于+
,所以上面的第三个句子等价于:
var c = (++a)+b;