JavaScript中有5中数据类型:underfined、null、boolean、number、string,还有一种数据类型——object,object本质上是一组无序的名值对组成的。
typeof操作符、
介于JavaScript是松散类型的,因此需要有一种手段来检测给定变量的数据类型——typeof是负责提供者方面信息的操作符,对于一个值使用typeof操作符可能返回下面某个字符串:
underfined——如果这个值未定义、Boolean——如果这个值是布尔值、number——如果这个值是数值、string——如果这个值是字符串、object——如果这个值是对象或null、
function——如果这个值是函数
数据类型:1.underfined类型
underfined类型只有一个值,即特殊的underfined。在使用var声明变量但未对其加以初始化时,这个变量的值就是underfined。
2.null类型
null类型是第二个具有一个数据类型,这个特殊的值就是null。从逻辑角度来看,null值表示一个空对象指针,而这也正是使用typeof操作符检测null时会返回object的原因
实际上,underfined值是派生自null的值,因此ECMA-262规定对他们的相等性测试要返回true
尽管underfined和null有这样的关系,但他们的用图完全不同。无论在什么情况下都没有必要把一个变量的值显示的设置为underfined,可是同样的规则对null却不适用,
换句话说,只要意在保存对象的变量还没有真正保存对象,就应该明确的让变量保存null值,这样做不仅可以体现null作为空对象指针的惯例,而且也有助于进一步区分null和underfined。
3.Boolean类型
Boolean类型只有两个值,true和false。这两个值与数字值不是一回事,因此true不一定等于1,false不一定等于0.。虽然Boolean类型的字面值只有两个值,但JavaScript中所有类型的值,
都有与这两个布尔类型等价的值,要将一个值转换为其对应的布尔值,可以调用类型转换函数Boolean()
4.number类型
这种类型用来表示浮点型和整数形,还有一种特殊的类型NaN(非数值NoN a number),这个值用来表示一个本来要返回数值的操作数未返回数值的情况(这样就不会抛出错误了)。
(例:在其他语言中,任何数除以0都会发生错误,而在JavaScript中任何数除以0都会返回NaN),因此不会影响其它代码是正常运行。
NaN本身有两个非同寻常的特点:1.任何发生NaN的操作都会都会返回NaN值,这个特点可能在多步计算中有可能导致问题。2.NaN值与任何值都不相等,包括NaN本身。
在JavaScript中有一个isNaN()函数,这个函数接受一个参数,该参数可以使任何类型。某些不是数值的值在isNaN()接受之后会转换成数值。
有三个函数可以把非数值转换为数值 number()、parseint()、parsefloat()。第一个函数可以用于任何数据类型,另外两个函数则专门用于把字符串转换成数值,这三个函数对于
同样的输入会返回不一样的结果。
number()函数转换的规则如下:如果是布尔值,true和false分别被转换为0和1
如果是数字值,只是被简单传入和返回
如果是null,则返回0
如果是underfined,则返回NaN
如果是字符串,则遵循如下规则:1.如果字符串只包含数字,则转换成为十进制。
2.如果字符串包含有效浮点数,则转换为相应的浮点数
3.如果字符串包含有效的十六进制数,则转换为相同大小的十进制整数型。
4.如果字符串是空,则转换成0
5.如果字符串包含了上述之外的字符,则返回NaN
如果是对象,则调用对象的valueof()方法,然后依照前面的规则转换成返回值。如果返回的结果是NaN,则调用对象的tostring()方法,然后在依次按照
前面的规则转换返回的字符串值。
由于number()函数在转换字符串时比较复杂而且不够合理,因此在处理整数的时候更常用的是paresint()函数。parseint()函数在转换成字符串时,更多的是看其是否符合数值模式。他会忽略
字符串前面的空格,直到找到第一个非空格字符。如果第一个字符串不是数字字符或者负号,paresint()会返回NaN。如果第一个字符串是数字字符,则paresint()函数就会继续解析第二个字符,
直到解析完所有后续字符或者遇到一个非数字字符。
如果字符串的第一个字符是数字字符,paresint()也能够识别出各种整数格式(即十进制、八进制、十六进制)
5.string类型
string类型用于表示由0或多个16位Unicode字符组成的字符序列,,即字符串。字符串可以由单引号(‘’)或双引号(“”)表示。
任何字符串的长度都可以通过访问其length属性取得
要把一个值转换为字符串有两种方式:1.几乎每个值都使用的tostring()方法。数值、布尔值、字符串、对象,都使用tostring()方法,但null和underfined没有这个方法。
多数情况下,调用tostring()方法不必传递参数,但是在调用数值的tostring()方法时,可以传递一个参数:输出数值的基数。
在不知道转换的值是不是null或underfined的情况下,还可以使用转换型函数string(),这个函数可以将任何类型的数值转换为字符串。
string()函数遵循如下规则:1.如果值有tostring()方法,则调用该方法(没有参数)并返回相应的结果
2.如果是null,则返回“null”
3.如果是underfined,则返回“underfined”
5.object类型
对象其实就是一组数组和功能的集合。对象可以通过执行new操作符后跟要创建的对象类型的名称来创建。而创建object类型的实例并为其添加属性和方法,就可以创建自定义方法。
object的每个实例都具有下列属性和方法:1.constructor——保存着用于创建对象的函数
2.hasOwnproperty(propertyname)——用于检查给定的属性在当前对象实例中(而不是实例的原型中)是否存在。其中,作为参数的属性名(propertyname)必须以字符串的形式存在。
3.isPrototypeOf(object)——用于检查传入的对象是否是另一个对象的原型
4.propertyisEnumberable(propertyName)——用于检查给定的属性是否是否能够使用for-in语句来枚举
5.tostring()——返回对象的字符串表示
6.valueOf()返回对象的字符串、数值、布尔值表示。通常与tostring()方法的返回值相同