关闭

javascript数据类型详解

标签: javascript
47人阅读 评论(0) 收藏 举报
分类:

ECMAScript中数据类型:

一、五种基本数据类型:

undefined 、null、boolean、number、string

二、一种复杂数据类型:

object

三、数据类型的检测:(写法:typeof(message) | typeof message)

undefined: 值未定义
Boolean:布尔类型值
string:字符串类型值
number: 数字型值
object:对象或者null(数组也是对象的一种,null会被认为是空对象的引用)
function: 函数

chrome控制台打印结果如下:

typeof k //"undefined" k是未声明变量
typeof true //"boolean"
typeof '123' //"string"
typeof 123 //"number"
typeof {} //"object"
typeof [] //"object"
typeof null //"object"
typeof function(){} //"function"

四、各类型详解:

1、undefined:

undefined类型只有一个值,即特殊的undefined。在使用var声明变量但是未对其加以初始化时,变量的值是undefined。
引入undefined主要是为了区分空对象指针与未经初始化的变量。
注意:值为undefined的变量与尚未定义的变量大不相同!
var message;//变量声明

console.log(message); //undefined
console.log(age); //报错 ,age是未声明的变量

console.log(typeof message);//undefined
console.log(typeof age);//undefined 未声明的变量这里返回为undefined类型。

//如果我们习惯性的在定义变量的时候将其初始化,可以断定此时返回undefined的原因是变量未定义。

2、null

null是第二个只有一个值的类型,从逻辑角度上来看,null表示一个空指针对象。
如果定义的变量准备在将来用于保存对象,最好将其初始化为null。
或者在一个对象准备弃用,为了避免后续开发人员误用,也可以将其定义为null。

注意: 
console.log(null==undefined);//true 两者有这样的关系,但是两者的用法完全不一样。

3、boolean

boolean是ECMAScript中使用最多的一种类型,该类型有两个字面量的值:true & false。
注意:
(1)这两个值与数字值不是一回事。true不一定表示1,false不一定表示0。
(2)true与false区分大小写。True和False都只是标识符,都不是boolean值。
(3)所有ECMAScript的值都与Boolean值有等价的值。可以用Boolean()转型函数来获取。

不同值类型转化的值类型结果:

数据类型 转换为true的值 转化为false的值
boolean true false
string 任何非空字符串 “”
number 任何非零数值 0
object 任何对象 null
undefined undefined

4、number

number类型使用IEEE754格式来表示整数和浮点型数值。

(1)整数:

最基本的是数值字面量格式是十进制整数 :
var intNum = 55;

八进制整数:
var intNum1 = 070;//十进制的56。八进制的数要以0开头。格式为0 + (0~7)。严格模式下八进制字面量是无效的。会导致javascript引擎报错。

十六进制整数:
var intNum2 = 0xA;//十六进制的10。格式为0x + (0~9)|(a~f)|(A~F),大小写字母表示的含义相同。

注意:
(1)在进行算数计算时,所有的八进制和十六进制表示的数值最终将转化成为十进制的数值进行计算。
(2)javascript中的0,可以表示为正零(+0)和负零(-0)。并且二者相等。
     console.log(+0 === -0);//true

(2)浮点型:

浮点型的数据占据的内存是整型的两倍。如果浮点型数值本身是一个整数,那么会自动转换为整数(如3.0)。
var floatNum1 = 1.0;//解析为1
var floatNum1 = 10.;//解析为10

科学计数法表示浮点型数值:
var floatNum = 3.125e7;// 3.15 * 10^7

默认情况下,ECMAScript会将那些小数点后面的带有6个以上的0自动转化为以e表示的数值。(例如0.0000003会被转成3e-7)。

浮点型数值的最高精度是17位小数。但是计算精度上远不如整数。比如:
0.1 + 0.2 = 0.30000000000000004; //会产生一定的舍入误差,这是IEEE754数值浮点计算的通病T-T

NaN是是非数值,这个数值用于表示一个本来要返回数值的操作数未返回数值的情况(避免抛出错误,从而影响其他代码的执行)。
注意:
(1)任何涉及NaN的运算,返回结果都是NaN。
(2)其次NaN与任何值都不相等包括自身。
     console.log(NaN == NaN) //false
     console.log(NaN === NaN) //false
(3)ECMAScript定义了isNaN()函数,来判断一个变量是否为NaN。该函数会接受任意类型的值,并且首先试图将其转换成数字。如果能转成,则返回false(表示不是NaN),否则返回true(为NaN).
    console.log(isNaN(NaN);//true
    console.log(isNaN(10);//false   
    console.log(isNaN('10');//false   转化成数字10 ,再判断。
    console.log(isNaN('blue');//true  blue不能转化为数字
    console.log(isNaN(true);//false  转化为1

数制转换:
有三个函数可以将非数值转化为数值。
(1)number() 可以将任何数值类型转化为数字类型。
(2)parseInt() 可以将字符串转化为整型数值。
(3)parseFloat() 可以将字符串转化为浮点型的数值。

注意:number()转化成数字的规则如下:
(1)如果是boolean类型,true和false将会被转换成 1和0;
(2)如果是数字,只是单纯的输入和传出。
(3)如果是null值,则返回0;
(4)如果是undefined,返回NaN;
(5)如果是字符串,则有一定的转换规则,见如下的例子。
(6)如果是对象,则调用对象的valueOf(),然后依照前面的规则转换返回的值。如果转换的结果是NaN,则调用对象的toString()方法,然后再依次按照前面的规则转换返回的字符串值。

    //关于number()
    console.log(Number('hello world'));//NaN
    console.log(Number(''));//0
    console.log(Number('00011'));//11 会忽略前面的0 进行转化
    console.log(Number(true));//1

    //关于parseInt()
    console.log(parseInt('1234blue')); //1234
    console.log(parseInt(' ')); //NaN 注意与number()方法返回值结果不同。
    console.log(parseInt('0xA'));//10 
    console.log(parseInt('22.5')); //22

    //parseInt()可以添加第二个参数,来指定第一个参数按照几进制来解析的
    console.log(parseInt("0xAF", 16)); //175 ,此时可以去掉前面表示十六进制的0x。
    console.log(parseInt("AF")); //NaN 


    //关于parseFloat()
    console.log(parseFloat('1234blue')); //1234 整数
    console.log(parseFloat(' ')); //NaN 注意与number()方法返回值结果不同。
    console.log(parseFloat('0xA'));// 0 由于parseFloat()只能解析十进制的数
    console.log(parseFloat('22.5')); //22.5
    console.log(parseFloat('33.43.5')); //33.43

5.string

字符串可以由单引号('')和双引号("")来表示.

ECMAScript中的字符串长度是不可变的。如:
    var lang = 'java';
    lang = lang + 'script';
实现过程如下:
    首先创建一个能容纳10个字符的新字符串。
    然后在这个字符串中填充'java'和'script'
    最后一步是销毁原来的字符串。'java'和'script'.

转换值的类型:
    (1)toString() 大部分值都有的方法
         var num= 10;
         console.log(num.toString());//'10'
         console.log(num.toString(2));//'1010'
         console.log(num.toString(10));//'10'
         console.log(num.toString(16));//'A'
    (2)String() 不清楚值是否为null/undefined时
         var num= 10;
         console.log(num.String(num));//'10'
         console.log(num.String(true));//'true'
         console.log(num.String(null));//'null'
         console.log(num.String(undefined));//'undefined'

6.object

创建对象的几种方式:

(1)字面量
var obj = {};
(2)构造函数
var obj = new Object();          
var obj = new Object;  //不推荐
(2)原型
Object.creat(protoype);

Object类型所具有的任何属性和方法,也同样存在于更具体的实例中。

(1)constructor: 保存着用于创建当前对象的函数.
(2)hasOwnProperty(prototyName): 用于检查给定的属性,在当前对象的实例中是否存在。
(3)isPrototypeOf(object): 用于检查 传入的对象是否为当前对象的原型。
(4)prototyIsEnumerable(prototyName): 用于检查给定的属性是否能使用for-in来进行枚举。
(5)toString():返回对象的字符串表示。
(6)valueOf():返回对象的字符串、数值或布尔值表示。
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:114次
    • 积分:21
    • 等级:
    • 排名:千里之外
    • 原创:0篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档