JavaScript----数据类型

1.typeof操作符

typeof 返回以下几种类型:

  • “undefined”
  • “boolean”
  • “string”
  • “number”
  • “function”
  • “object”

2.undefined类型

  • 声明变量但未对其加以初始化时,这个变量的值就是undefined
  • 引用未初始化的变量会报错 XXX is not defined
    注:对未初始化和未声明的变量执行typeof操作符都返回undefined值**

3.null类型

null值表示一个空对象指针,意在保存对象的变量还没有真正保存对象,应该明确的让该变量保存null值。
注:null == undefined返回true

4.Boolean类型

该类型只有、两个字面值:true和false

可以对任何数据类型的值调用Boolean()函数,而且总会返回一个Boolean值

  • Boolean转Boolean,true->true ,false->false
  • String转Boolean, 任何非空字符串->true , “”-> false
  • Number转Boolean,任何非0数字值(包括无穷大)-> true,0和NaN -> false
  • Object转Boolean,任何对象->true ,null->false
  • undefined 转Boolean ->false
    总结:只有0,null,undefined,"",NaN这五个值转换为false,其余都转换为true

5.Number类型

整数和浮点数,整数可以通过十进制、八进制和十六进制来表示。

  • 八进制第一位必须是0,然后是八进制数字序列(0~7)。如果字面值中的数值超出了范围,那么前导0将被忽略,后面的数值将被当作十进制数值解析。(八进制字面量在严格模式下是无效的)
var octalNum1 = 070 //八进制的56
var octalNum2 = 079 //无效的八进制数值---解析为79
var octalNum3 = 08 //无效的八进制数值---解析为8
  • 十六进制字面量的前两位必须是0x,后跟任何十六进制数字(0~9及A-F),其中字母A-F可以大写也可以小写
var hexNum1 = 0xA //16进制的10
var hexNum2 = 0x1f //16进制的31

注:在进行算数计算时,所有以八进制和十六进制便是德数值都将被转换成十进制数值

  • 浮点数值
    1.小数点前面可以没有整数,但是不推荐
var floatNum = .1//有效但不推荐

2.由于保存浮点数值需要的内存空间是保存整数值的两倍。因此ECMAScript会不失时机的将浮点数值转换为整数值。

var floatNumber = 1.;//小数点后面没有数字---解析为1
var floatNumber2 = 10.0;//整数---解析为10

3.浮点数值的最高精度是17位小数,但在进行算术计算时其精确度远远不如整数。例如0.1+0.2 =0.30000000000000004

  • 数值范围
    1.最小数值:Number.MIN_VALUE(5e-324)
    2.最大数值:Number.MAX_VALUE(1.7976931348623157e+308)
    3.如果计算结果超出JavaScript数值范围的值,那么这个数值将被自动转换成特殊的Infinity值。
    4.使用isFinite()函数确定一个数值是不是有穷的
  • NaN
    用于表示一个本来要返回数值的操作数未返回数值的情况
    1.任何涉及NaN的操作都会返回NaN
    2.NaN与任何值都不相等,包括NaN本身
    3.isNaN()函数用以确定不是数值。isNaN()在接收到一个值之后,会尝试将这个值转换为数值(基于Number())。任何不能被转换为数值的值都会导致这个函数返回true
isNaN(NaN) //true
isNaN(10) //false
isNaN("10") //false
isNaN("blue") //true
isNaN(true) //false

4.基于对象调用isNaN()函数时,会首先调用
对象的valueOf()方法确定该方法返回的值是否可以转换为数值。如果不能,则基于这个返回值再调用toString()方法,再测试返回值。

isNaN({})//true
isNaN([])//false
isNaN([10])//false
isNaN([10,20])//true
  • 数值转换
    有三个函数可以把非数值转换为数值:Number()、parseInt()、parseFloat()。第一个函数可用于任何数据类型,另两个函数专门用于把祖父穿转换成数值。
    1.Number()函数的转换规则
    (1)Boolean:true->1 false->0
    (2)Number:简单的传入和返回
    (3)null:返回0
    (4)undefined:返回NaN
    (5)String:
    a.只包含数字,将其转换为十进制数值
    b.有效的浮点格式,转换成对应的浮点数值
    c.有效的十六进制,转换成对应的十进制整数值
    d.空字符串""->0
    e.字符串包含上述格式之外的字符,转换为NaN
    (6)Object:调用对象的valueOf方法,然后依照前面的规则转换返回的值,如果转换的结果是NaN,则调用对象的toString()方法,然后再依照前面的规则转换返回的字符串值
var num1 = Number("Hello World") //NaN
var num2 = Number("") // 0
var num3 = Number("000011") // 11
var num4 = Number("true") // 1
var num5 = Number("1234blue") //NaN
var num6 = Number("undefined") //NaN
var num7 = Number({}) //NaN
var num8 = Number([]) //0
var num9 = Number([10]) //10
var num10 = Number([10,20]) //NaN
var num11 = Number(0xf) //15
var num12 = Number(null) //0

2.parseInt()函数的转换规则
(1)会忽略字符串前面的空格,直至找到第一个非空格字符。如果第一个字符不是数字字符或符号,返回NaN
(2)如果第一个字符是数字字符,会继续解析第二个字符,直到解析完所有后续字符或者遇到了一个非数字字符
(3)字符串以0x开头且后跟数字字符,就回将其当做一个十六进制整数,字符串以0开头且后跟数字字符,则会将其当做一个八进制数来解析

var num1 = parseInt("1234blue") //1234
var num2 = parseInt("") //NaN
var num3 = parseInt("0xA") //56
var num4 = parseInt("22.5") //22
var num5 = parseInt("070") //56
var num6 = parseInt(undefined) //NaN
var num7 = parseInt(null) //NaN
var num8 = parseInt({}) //NaN
var num9 = parseInt([]) //NaN
var num10 = parseInt([10]) //10
var num11 = parseInt([10,20]) //10

(4)parseInt()提供第二个参数:转换时使用的基数

var num1 = parseInt('0xAF',16) //175
//实际上,如果指定了16作为第二个参数,字符串可以不带前面的0x
var num2 = parseInt('AF',16) //175
var num3 = parseInt('AF') //NaN

3.parseFloat()函数的转换规则
(1)字符串第一个小数点有效,第二个小数点无效
(2)始终会忽略前导的0(16进制格式的字符串始终会被转换成0)
(3)只解析十进制值,因此它没有用第二个参数指定基数的用法
(4)如果字符串包含的是一个可解析为整数的数(没有小数点或小数点后面都是0),会转换成整数

var num1 = parseFloat("1234blue") //1234
var num2 = parseFloat("0xA") //0
var num3 = parseFloat("22.5") //22.5
var num4 = parseFloat("22.34.5") //22.34
var num5 = parseFloat("0908.5") //908.5
var num6 = parseFloat("3.125e7") //31250000

6.String类型

把一个值转换为字符串有两种方式

  • 使用每个值几乎都有的toString()方法,但null和undefined没有这个方法
    多数情况下不必传递参数,但在调用数值的toString()方法时,可以传递一个参数:输出数值的基数
var num = 10
num.toString()//"10"
num.toString(2)//"1010"
num.toString(8)//"12"
num.toString(16)//"a"
  • 转型函数String()
    遵循下列规则:
    (1)如果值有toString()方法,则调用该方法并返回相应结果
    (2)如果值是null,则返回‘null’
    (3)如果值是undefined,则返回‘undefined’
var value1 = 10
var value2 = true
var value3 = null
var value4 = undefined

String(value1) //"10"
String(value2) //"true"
String(value3) //"null"
String(value4) //"undefined"

7.Object类型

在ECMAScript中,Object类型是所有它的实例的基础,换句话说,Object类型所具有的任何属性和方法也同样存在于更具体的对象中。

var o = new Object()

Object的每个实例都具有下列属性和方法

  • constructor:保存着用于创建当前对象的函数。对于前面的例子而言,构造函数(constructor)就是Object()
  • hasOwnProperty(propertyname):用于检查给定的属性在当前对象实例中(而不是在实例的原型中)是否存在。其中,作为参数的属性名(propertyname)必须以字符串形式指定
  • isPrototypeOf(object):用于检查传入的对象是否四传入对象的原型
  • propertyIsEnumerable(propertyname):用于检查给定的属性是否能够使用for-in语句来枚举。与hasOwnProperty()一样,作为参数的属性名必须与字符串形式指定
  • toLocaleString():返回对象的字符串表示,该字符串与执行环境的地区对应
  • toString():返回对象的字符串表示
  • valueOf():返回对象的字符串、数值或布尔值表示。通常与toString()的返回值相同
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值