美文网首页
数据类型

数据类型

作者: 微微下雨天 | 来源:发表于2018-08-17 11:19 被阅读0次

Undefined

Undefined只有一个特殊值,即undefind,在使用var申明变量但没有对其赋值时,这个变量值就是undefined,例如:

var message;
message == undefined  // true

Null

Null是JS中第二个只有一个值的数据类型,其值为nullnull值表示一个空对象指针,使用typeof检测会返回object,例如:

var car = null;
typeof car  // 'object'

undefined派生自null,所以null == undefined会返回true

Boolean

布尔类型返回两个值,即truefalse
数据类型与布尔值之间的转换

数据类型 转换为true值 转换为false值
Boolean true false
String 任何非空字符串 "" (空字符串)
Number 任何非零数值(包括无穷大) 0和NaN
Object 任何对象 null
Undefined 不适用 undefined

Number

使用number类型来表示正数与浮点数。number类型除了可以表示10进制数外,还可以表示8进制,16进制等。
JS中可以保存+0-0+0 == -0 // true

  • 浮点数 & 科学计数法

浮点数保存需要的内存,是正数值的2倍。所以JS中不符合浮点数规则的数会自动被转换为正数

var float1 = 1.     // 将被解析为整数 1
var float2 = 10.00  // 将被解析为整数 10

对于极大或者极小的数,可以使用e科学计数法表示

var float2 = 3.14e7  // 表示 3.14*10的7次方
var float2 = 3.14e-7  // 表示 3.14*10的-7次方

浮点数的最高精度是17位,但是做数学运算的时候,其精度远远不及整数

var a = 0.1+0.2 // 并不是输出0.3 而是 0.30000000000004

所以,最好不要用浮点数做运算和做判断。
JS中能够表达的最大的值,保存在Number.MAX_VALUE,表达的最小的值,保存在Number.MIN_VALUE中。

Number.MAX_VALU // 1.7976931348623157e+308
Number.MIN_VALUE //5e-324

如果某次运算超出了JS的数值计算范围,则会返回Infinity,负数为-Infinity(负无穷),正数为Infinity(正无穷),可以使用isFinite()函数检测是不是位于最大值和最小值之间,该函数返回布尔值

  • NaN & isNaN

NaN表示非数值。这个值表示一个要返回数值的操作并未返回数值。任何与NaN的操作,都会返回NaN,比如NaN/10 // NaNNaN不与任何值相等,包括它自己,NaN == NaN // false

isNaN函数,帮助我们确定这个参数是否'不是一个数值',任何不能被转换为数值的值,都会导致这个函数返回true

isNaN(NaN)    // true
isNaN(10)      // false 10是一个数
isNaN('10')    // false 可以被转换为number
isNaN('blue')   // true 不能被转换为number
isNaN(true)   // false 可以被转换为数值 1

尽管有点儿不可思议,但isNaN()确实也适用于对象。在基于对象调用isNaN()函数时,会首先调用对象的valueOf()方法,然后确定该方法返回的值是否可以转 换为数值。如果不能,则基于这个返回值再调用toString()方法,再测试返回值。 而这个过程也是ECMAScript中内置函数和操作符的一般执行流程。

  • 数值转换

Number() parseInt() parseFloat()
Number可以用于任何数据类型,另外两个则专门用于把字符串转成数字,这3个函数对同样的输入会返回不同的结果。

Number()函数的转换规则如下。

  • 如果是Booleantruefalse将分别被转换为10
  • 如果是数字值,只是简单的传入和返回。
  • 如果是null值,返回0
  • 如果是undefined,返回NaN
  • 如果是字符串,遵循下列规则:
    1、如果字符串中只包含数字(包括前面带正号或负号的情况),则将其转换为十进制数值,即"1" 会变成 1,"123"会变成 123,而"011"会变成 11(注意:前导的零被忽略了);
    2 、如果字符串中包含有效的浮点格式,如"1.1",则将其转换为对应的浮点数值(同样,也会忽略前导零);
    3 、如果字符串中包含有效的十六进制格式,例如"0xf",则将其转换为相同大小的十进制整数值;
    4 、如果字符串是空的(不包含任何字符),则将其转换为 0;
    5 、如果字符串中包含除上述格式之外的字符,则将其转换为NaN
  • 如果是对象,则调用对象的valueOf()方法,然后依照前面的规则转换返回的值。如果转换的结果是NaN,则调用对象的toString()方法,然后再次依照前面的规则转换返回的字符串值。
var num1 = Number("Hello world!"); //NaN
var num2 = Number(""); //0
var num3 = Number("000011"); //11
var num4 = Number(true); //1

字符串"Hello world!"会被转换为NaN,因为其中不包含任何有意义的数字值。空字符串
会被转换为 0。字符串"000011"会被转换为 11,因为忽略了其前导的零。最后,true值被转换为 1。
parseInt()忽略字符串的空格,找到第一个非空字符串,如果第一个字符不是数字字符或者符号,则返回NaN。用parseInt()转换空字符串会返回 NaN(Number()对空字符返回0)。如果遇到非数字字符,则停止解析。同时parseInt也能够字符解析8进制(ES3 ES5不具备解析8进制的能力),16进制等。

var num1 = parseInt("1234blue"); // 1234
var num2 = parseInt(""); // NaN
var num3 = parseInt("0xA"); // 10(十六进制数)
var num4 = parseInt(22.5);  // 22
var num5 = parseInt("070"); // 56(八进制数)
var num6 = parseInt("70");  // 70(十进制数) 
var num7 = parseInt("0xf"); // 15(十六进制数)

同时,parseInt可以传入第二个参数,具体按照什么进制来转换

var n1 = parseInt(70,10)   // 按照10进制解析
var n2 = parseInt(70,8)   // 按照8进制解析

parseFloatparseInt差不多,只是parseFloat只能解析10进制的数,所以没有第二个参数。

String

  • toString方法
    NumberBooleanObjectString值(没错,每个字符串也都有一个 toString()方法,该方法返回字 符串的一个副本)都有toString()方法。但nullundefined值没有这个方法。Number调用toString可以传递参数,即需要转换的字符基数。默认按照10进制输出
var num = 10;    
alert(num.toString());   // "10"
alert(num.toString(2));  // 2进制 "1010"
alert(num.toString(8));  // 8进制  "12"
alert(num.toString(10)); // 10进制  "10"
alert(num.toString(16)); // 16进制  "a"
  • String方法
    String函数转换规则
    1 、 如果值有toString()方法,则调用该方法(没有参数)并返回相应的结果
    2 、 如果值为null ,则返回'null'
    3 、 如果值为undefined ,则返回'undefined'
var value1 = 10;
var value2 = true;
var value3 = null;
var value4;
alert(String(value1));   // "10"
alert(String(value2));  // "true"
alert(String(value3));  // "null"
alert(String(value4));  // "undefined"

Object

Object类型所具有的任何属性和方法也同样存在于更具体的对象中。
Object的每个实例都具有下列属性和方法。

  • constructor:保存着用于创建当前对象的函数。对于前面的例子而言,构造函数(constructor) 就是Object()
  • hasOwnProperty(propertyName):用于检查给定的属性在当前对象实例中(而不是在实例 的原型中)是否存在。其中,作为参数的属性名(propertyName)必须以字符串形式指定(例 如:o.hasOwnProperty("name"))。
  • isPrototypeOf(object):用于检查传入的对象是否是传入对象的原型
  • propertyIsEnumerable(propertyName):用于检查给定的属性是否能够使用for-in语句来枚举。与hasOwnProperty()方法一样,作为参数的属性名必须以字符=串形式指定。
  • toLocaleString():返回对象的字符串表示,该字符串与执行环境的地区对应。
  • toString():返回对象的字符串表示。
  • valueOf():返回对象的字符串、数值或布尔值表示。通常与toString()方法的返回值相同。

相关文章

  • JAVA 之路第一讲

    数据类型: 基础数据类型 包装器数据类型 引用数据类型 null 数据类型 基础数据类型: 整型 byte(字节型...

  • php 数据类型和数据类型转化

    一、数据类型 基础数据类型 复合数据类型 特殊数据类型 二、获取数据类型 三、打印数据类型和值 四、数据类型判断 ...

  • OC和C中的数据类型

    数据类型对比 C语言数据类型C语言数据类型 OC数据类型

  • JAVA 核心笔记 || [2] 数据类型

    JAVA数据类型分为两大数据类型: 1.内置数据类型2.引用数据类型 内置数据类型 引用数据类型 上篇 : 开篇 ...

  • 数据类型

    数据类型作用:数据类型不同,空间大小不同。 数据类型分类:基本数据类型、引用数据类型基本数据类型:整数型、浮点型、...

  • Java知识之数据类型

    Java数据类型图表## Java数据类型分为:### 基础数据类型 引用数据类型 null类型 基础数据类型分別...

  • JAVA基础第四天

    JAVA数据类型---布尔类型; 数据类型转换自动数据类型转换 强制数据类型转换

  • Java数据类型(慢慢积累,对于事物的理解也会不一样)

    Java的数据类型: 1. 内置数据类型(基本数据类型); 2. 引用数据类型; Java基本数据类型:(...

  • 【IOS 开发】 数据类型详解

    1. 数据类型简介及输出 (1) 数据类型简介 数据类型简介: Object - C 数据类型 分为 基本数据类型...

  • iOS 数据类型简介及输出

    一、数据类型简介及输出 1.数据类型简介 数据类型简介 : Object - C 数据类型 分为 基本数据类型, ...

网友评论

      本文标题:数据类型

      本文链接:https://www.haomeiwen.com/subject/tmezbftx.html