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