Javascript数据类型

数据类型定义

数据类型分类

基本数据类型:number,string,boolean,symbol(ES6新增)
特殊数据类型:null, undefined
引用数据类型:object
js的常见内置对象类:Date,Array,Math,Number,Boolean,String,Array,RegExp,Function...
其中特殊数据类型属于基本数据类型,所以:
基本数据类型:String,boolean,Number,Symbol(ES6新增),Undefined, Null
引用数据类型:Object

数据类型访问

基本数据类型:基本数据类型值指保存在栈内存中的简单数据段。访问方式是按值访问,操作的是变量实际保存的值。
引用数据类型:引用数据类型值指保存在堆内存中的对象。也就是,变量中保存的实际上只是一个指针,这个指针指向内存中的另一个位置,该位置保存着对象。访问方式是按引用访问,当操作时,需要先从栈中读取内存地址,然后再延指针找到保存在堆内存中的值。

数据类型操作

基本类型变量的复制:从一个变量向一个变量复制时,会在栈中创建一个新值,然后把值复制到为新变量分配的位置上。
引用类型变量的复制:复制的是存储在栈中的指针,将指针复制到栈中未新变量分配的空间中,而这个指针副本和原指针指向存储在堆中的同一个对象;复制操作结束后,两个变量实际上将引用同一个对象。因此,在使用时,改变其中的一个变量的值,将影响另一个变量。

数据类型检测

Typeof

Typeof操作符是检测基本类型的最佳工具

"undefined"—这个值未定义"boolean"—这个值是布尔值"string"—这个值是字符串"number"—这个值是数值"object"—这个值是对象或null"function"—这个值是函数

Instanceof

Instanceof用于检测引用类型,可以检测到它是什么类型的实例。instanceof 检测一个对象A是不是另一个对象B的实例的原理是:查看对象B的prototype指向的对象是否在对象A的[[prototype]]链上。如果在,则返回true,如果不在则返回false。不过有一个特殊的情况,当对象B的prototype为null将会报错(类似于空指针异常)。

var sXzaver = new String("Xzavier"); console.log(sXzaver instanceof String);   //  "true"var aXzaver = [1,2,3]; console.log(aXzaver instanceof Array);   //  "true"检测数组在ECMA Script5中定义了一个新方法Array.isArray()

Object.prototype.toString.call(obj)

写一个方法用于检测,更加精准。

原理:var obj = {name:"Xzavier", age:23};var a = [1,2,3];console.log(obj.toString());//"[object Object]"此时调用的是从Object继承来的原始的toString()方法function isType(obj) {    return Object.prototype.toString.call(obj).slice(8, -1);}isType(obj);  // "Object" isType(a)  // "Array"  

数据类型转换

隐式转换

undefined == null;  // true   1 == true;  // true  2 == true;  // false  0 == false;  // true0 == '';  // true   NaN == NaN;  // false  NaN不等于任何值[] == false;  // true  [] == ![];  // true'6' - '3'  // 31234 + 'abcd' // "1234abcd"

undefined与null相等,但不恒等(===)
一个是number一个是string时,会尝试将string转换为number
尝试将boolean转换为number,0或1
尝试将Object转换成number或string,取决于另外一个对比量的类型
所以,对于0、空字符串的判断,建议使用 “===” 。
“===”会先判断两边的值类型,类型不匹配时为false。

显示转换

显示转换一般指使用Number、String和Boolean三个构造函数,手动将各种类型的值,转换成数字、字符串或者布尔值。
Number:

Number('1234') // 1234Number('1234abcd') // NaNNumber('') // 0Number(true) // 1Number(null) // 0Number(undefined) // NaN

String:

String(1234)  // "1234"String('abcd')  // "abcd"String(true)  // "true"String(undefined) // "undefined"String(null)  // "null"

Boolean:

Boolean(0)  // falseBoolean(undefined)  // falseBoolean(null)  // falseBoolean(NaN)  // falseBoolean('')  // false

当然,使用下面的方法在代码中做判断是非常棒的:

!!'foo';   // true!!'';      // false!!'0';     // true!!'1';     // true!!'-1'     // true!!{};      // true!!true;    // true

或者在你的判断中直接使用 if(obj){do something}

Number、String、Boolean转换对象时主要使用了对象内部的valueOf和toString方法进行转换。
Number、String、Boolean转换对象参考:阮老师:数据类型转换
哇哦,coll: What is {} + {} in JavaScript?

关于JavaScript数据类型还有太多值得我们去了解和学习,fighting

关键字:JavaScript

版权声明

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部