Number(): 将数据转成数值类型.bash
Number()能够将对任意值进行数值的类型转换,分为几种状况:spa
Number('123');
复制代码
在控制台上输入这句,打印出的是数字类型的123,而不是字符串类型的。code
Number('abc');
Number('123a');
Number('中文');
...
复制代码
这些状况进行Number()转换,值是NaN,即:非数。可是NaN也是属于数字类型的。字符串
Number(undefined);
复制代码
打印的结果是NaN.string
Number(null);
Number(false);
复制代码
打印的值是0.it
Number(true);
复制代码
打印的值是1.class
parseInt(100.23); // -> 100
parseInt(5.9); // -> 5
复制代码
parseInt('100'); // - > 100
parseInt('123.66'); // -> 123
复制代码
parseInt('225aaa'); // -> 225
parseInt('100bcd88'); // -> 100
parseInt('eee32'); // NaN
复制代码
这么说有点抽象,举个例子:变量
parseInt('26',8);
复制代码
执行这段代码,就会把字符串‘26’做为8进制的整数,而后再转换成10进制的数值进行输出。好比上面这段代码,8进制的26,其实在十进制里是22,因此打印出的结果是22.二进制
第二个值能够写也能够不写,范围在2~36之间,若是你的取值不在这个区间,返回结果是NaN.方法
须要注意的是,若是你输入的第一个值,很明显不在后面填写的进制范围内,返回结果也是NaN,请看例子:
parseInt(8,2);
复制代码
上面的代码是要把以2进制为基底的数值8,转换成十进制的整数。 可是2进制咱们都知道,只有0、1,不可能出现8,全部执行该代码返回的结果只能是NaN.
parseFloat(): 将数据转成浮点型数值。
这个比较好理解,数值原本就不必定是恰好是整数的,不少时候咱们可能会用到小数,因此这个方法刚好能够帮咱们保留值得小数部分。
parseFloat('1.5a'); // -> 1.5
parseFloat('a1.5'); // -> NaN
复制代码
固然了,和parseInt()同样,对于字符串的开头是非数的值,转换结果是NaN.
var n = 123;
n.toString(); // -> '123'
复制代码
该方法能够把值转换成字符串的类型,可是注意了,undefined 和 null 不能调用该方法,即便是先赋值给变量,再调用也不行,会报错。
var a = 2 + '3'; // -> '23'
var b = 5 + 'hello'; // -> '5hello'
复制代码
数字和字符串相加,无论字符串是数字的字符串,仍是非数字的字符串,都是直接进行字符的拼接,变成字符串类型的值。
var a = 2 + true; // -> 3
var b = 5 + false; // -> 5
复制代码
数字与布尔值相加,布尔值进行了隐示的Number()类型转换,true=1,false=0.
var a = 'a' + true; // -> 'atrue'
var b = 'b' + false; // -> 'bfalse'
复制代码
null和布尔值同样,会进行隐示的Number()类型转换,变成0,全部与数字相加是数字类型的转换,与字符串相加变成字符串。
var a = 2 + null; // -> 2
var b = true + null; // -> 1
var c = 'abc' + null; // -> 'abcnull'
复制代码
说位运算符以前,首先咱们看一下,2进制是怎么转换成十进制的。
将数据转成二进制而后执行运算
1 10 11 100 101 110 111 1000 1001...
2 4 8
复制代码
咱们看第一行,是二进制的1位数,2位数,3位数等等,下面对应第一行位置的第二行,是这个数字在十进制中的数值。
即: 二进制10 = 十进制2 = 2的1次方;
100 = 4 = 2的2次方;
1000 = 8 = 2的3次方;
...
有几个零,就是2的几回方。
因此100000 = 2的5次方 = 32;
11001 = 10000 + 1000 + 1 = 16 + 8 + 1 = 25;
2进制就是这样转化成十进制的,而后咱们一块儿看位运算符。
var a = 5 & 9;
复制代码
首先咱们须要把5和9都转换成2进制的数,再进行运算。
5 = 4 + 1 = 100 + 1 = 101; 9 = 8 + 1 = 1000 + 1 = 1001;
再把5和9进行上下的每一位进行对比,位数不够能够前面补零:
0101 // 5
↓↑
1001 // 9
进行上下对比:
0001
复制代码
上下两位都是1的,结果是1,不然是0,因此上面的结果是0001,也就是1,因此打印出 a 的结果就是1.
var a = 5 | 9;
0101 // 5
↓↑
1001 // 9
进行上下对比:
1101
复制代码
得出的结果是1101,可是不是直接打印出1101,由于这个是2进制的,须要转化成十进制的,再打印出来,因此结果是 13.
var a = 5 ^ 9;
0101 // 5
↓↑
1001 // 9
进行上下对比:
1100
复制代码
得出的结果是1101,转化成十进制再打印出来,结果是 12.
按位右移,是指把数值转化成2进制的,而后把数值总体往右移n位,具体多少位,能够自定义,移几位,就删除尾数几位。
var a = 16 >> 1; //先把16转化成2进制的数
16 -> 10000
往右移1位,即删除最后一位
获得 1000
1000 转化成十进制 -> 8
复制代码
因此数值 16 按位右移1位获得的值是 8.是以前的 1/2 倍
16 按位右移2位获得的值是 4.是以前的 1/4 倍
16 按位右移3位获得的值是 2.是以前的 1/8 倍
可是为何以前说是大概呢,由于对于偶数,后面去除的位数恰好是0,正好就是整数倍。可是对于奇数,或者后面去除的位数是1的,会向下取整。
var a = 15 >> 1; //先把15转化成2进制的数
15 -> 1111;
往右移1位,即删除最后一位
获得 111
111 转化成十进制 -> 7
复制代码
15 按位右移1位获得的值是 7; //14的一半
13 按位右移1位获得的值是 6; // 12的一半
11 按位右移1位获得的值是 5; // 10的一半
复制代码
获得的值,恰好是(该值-1 )的一半。
这个是正好的倍数,由于每次都是在末尾加一个0,不是加1,没有偏差。
var a = 10 << 1; //先把10转化成2进制的数
10 -> 1010;
往左移1位,即在最后一位添加一个0
获得 10100
10100 转化成十进制 -> 20
复制代码
10 按位右移2位获得的值是 40.是以前的 4 倍
10 按位右移3位获得的值是 80.是以前的 8 倍
以此类推。