javascript中的七大内置类型
在javascript中存在七种内置类型,其中6中是es5的,在es6中被新增加了一个symbol。
- 空值(null)
- 未定义(undefined)
- 字符串(string)
- 数值(number)
- 对象(object)
- 布尔(boolean)
- 符号(symbol)
1. null
一个单值数据类型,只有一个值null,从逻辑上说,它属于一个空值对象,所以:
typeof null == object
存在但是没有使用的变量的值就是 null,例如
let a = null
undefined其实派生于null ,所以:
undefined == null //true
但是这两者完全不同的使用场景
2.undefined
第二个单值数据类型,只有一个值undefined,是指定义了但是还没有赋值的变量
let a;
typeof a //undefined
注意一点针对没有声明的变量,typeof的值也是undefined
typeof c //undefined
3.string
字符串用于表示零个或是多个16位Unicode字符组成的字符串。
> 3.1 字符字面量(转义字符)
> 3.2 字符串的特点
字符串一旦被创建就不能改变
let s = "hello";
s = s +"world"
上边的代码发生的事件是,首先创建了一个字符串,填入“hello”,然后创建一个10个字符空间,填入s,”world”,这样的拼接方式也是旧版本的浏览器的字符串拼接慢的原因
>3.3 字符串转化
两个方法toString(),String()
8. toString()
被调用者是否有这个方法,undefined,null都没有这个方法,注意如果是number类型的数据在转化时可以传入转化后的进制,默认是10进制
let s= 10;
s.toString(10); //10
s.toString(16); //a
s.toString(8); //12
s.toString(3);//101
9. String()
在不知道是undefined或是null的情况下,使用String()是最合理的,避免了error的发生,
let a ;
a.toString(); // Cannot read property 'toString' of undefined
String(a);// undefined
null同上
4.number
在javascript 中的一般用来表示数值的有整形以及浮点类型,几种进制类型:十进制(10),十六进制(0x10),八进制(010),以及二进制(0b10)
>4.1浮点数
浮点数使用的是17位精度,所以占用的空间相对较大,在计算时候的精确度远远不如整数。ECMA在存储的时候对部分浮点数进行了处理,例如1.0这样的数据会处理成1这样的整数,还有一个就是永远不要测试某个特定的浮点数的值,如下
let a = 0.1;
let b = 0.2;
a + b ==0.3 ;//false
>4.2数值范围
由于内存限制,在javascript中并不能表示说有的数值,在(Number.MIN_VALUE,Number.MAX_VALUE)之间,超过Number.MAX_VALUE的是+Infinity,小于Number.MIN_VALUE的是-Infinity,同时可以使用isFinite()来进行检测是否为有限数
isFinite(1); //ture
>4.3NaN(not a number)
- X/0 不报错
在其他的编程语言中,任何数除以0最终的结果会报错,但是在JavaScript中 任何数除以0的值为NaN
1/0 ;//NaN
- NaN特点
1.任何数对NaN操作,结果都是NaN
2.NaN与任何数都不相等,包括它自己,NaN != NaN
针对这样的特性只有通过isNaN()来判断是不是not a number,在判断前这个函数会将之转化为数值,任何不能转化为数值的结果都是true;
alert(isNaN(NaN)); //true
alert(isNaN("10")); //false(可以被转换成数值 10)
alert(isNaN(true)); //false(可以被转换成数值 1)
alert(isNaN("blue")); //true(不能转换成数值)
>4.4 数值转化
三个方法:Number() , parseInt(), parseFloat()
Number()
Number()函数的转换规则如下。
如果是 Boolean 值,true 和 false 将分别被转换为 1和 0。如果是数字值,只是简单的传入和返回。
如果是 null 值,返回 0。
如果是 undefined,返回 NaN。
如果是字符串,遵循下列规则:
如果字符串中只包含数字(包括前面带正号或负号的情况),则将其转换为十进制数值,即”1” 会变成 1,”123”会变成 123,而”011”会变成 11(注意:前导的零被忽略了);
如果字符串中包含有效的浮点格式,如”1.1”,则将其转换为对应的浮点数值(同样,也会忽 略前导零);
如果字符串中包含有效的十六进制格式,例如”0xf”,则将其转换为相同大小的十进制整 数值;
如果字符串是空的(不包含任何字符),则将其转换为 0;
如果字符串中包含除上述格式之外的字符,则将其转换为 NaN。
如果是对象,则调用对象的 valueOf()方法,然后依照前面的规则转换返回的值。如果转换 的结果是 NaN,则调用对象 的 toString()方法,然后再次依照前面的规则转换返回的字符 串值parseInt()
转换为整数型,相对于Nuuber来说更加合理,同时还可以指定转换后的进制
var num1 = parseInt("1234blue"); // 1234
var num3 = parseInt("0xA"); // 10(十六进制数)
var num3 = parseInt("10", 10); //10 (按十进制解析)
var num4 = parseInt("10", 16); //16 (按十六进制解析)
parseFloat()
parseFloat只是对十进制的进行解析,所以没有第二个参数,parseFloat转换没有小数的数据,返回来的是整数
let a = 10.0;
parseFloat(a);//10