写在前面:
最早对javaScript的理解与应用只是停留在简单的表单验证与写简单的小游戏,直到今年戏剧化的被转入前端工作中。对javaScript的需求随之扩大,至此才认识到自己的js技能实在浅薄。
断续在对js做一个系列的学习,主要是根据自己认为模糊的点与没了解过的知识在网络及书中寻求探索的过程。所以该文可能不是所谓的javaScript入门级,我将它们定位为:由后端转向前端的js扫盲篇。
这一篇是 javaScript基础-数据类型,即: ECMAScript 值类型(原始类型)、 引用类型(即对象)。
>类型说明<
---值类型---
定义:在ECMAScript中,原始类型为undefined、null、number、boolean、string该5种。
存储方式:存储在栈(stack)中的简单数据段(它们的值直接存储在变量访问的位置),占据空间固定。
特征:(1).原始类型比较值时,是值(字面量)比较;(2).原始类型无法添加属性。
以下分别说明5种类型的值:
undefined类型
该类型只有一个值,就是它本身。undefined表示缺少值,即此处应该有一个值,但还未定义。典型用法如下:
(2) 调用函数时,应该提供的参数没有提供,该参数等于undefined。
(3)对象没有赋值的属性,该属性的值为undefined。
(4)函数没有返回值时,默认返回undefined。
(1)变量被声明了,但没有赋值时,就等于undefined。
(2) 调用函数时,应该提供的参数没有提供,该参数等于undefined。
(3)对象没有赋值的属性,该属性的值为undefined。
(4)函数没有返回值时,默认返回undefined。
注:在最新的js规范严格模式中,未使用var创建的变量,会抛出错误。此处再后续章节中会引例说明。
null类型
该类型也只有一个值,就是自己,即字面量。null表示没有对象,即此处不应该有值。典型用法如下:
(2) 作为对象原型链的终点。
Object.getPrototypeOf(Object.prototype)
// null
number类型
ECMA-262最特殊类型,可表示64位整数也可表示32为浮点数 。
如是浮点数就必须包含小数点及小数点后一位数(如1.0)。
boolean类型
该类型的值只有true/false。
字符串类型
没有固定大小。
typeof运算符
在实际应用中,我们常常需要知道原始值的具体类型。在js中,可用typeof运算符来区分。用法如下:
var nCount=21.0; alert(typeof nCount); //number
注:typeof对所有引用类型都返回Object。
typeof还可用在判断变量是否存在。
>不使用typeof的情况,抛出异常。
if(nCount==="undefined"){ alert('msg'); }
>使用typeof判断,弹出字符串msg。
if(typeof nCount==="undefined"){ alert('msg'); }
---引用类型---
定义:1.原始值的封装类 Boolean、String、Number 2.用字面量创建的对象;构造函数建
存储方式:存储在堆(heap)中的对象(存储的值是一个指针,指向对象的内存处)
特征:1.对象可变(增加属性等) 2.每个对象都有唯一标识,比较时是通过引用比较(只有内存地址相同) 3.变量保存了对象的引用。
instanceof
在使用引用类型时,通常需要判断变量是否为某对象的实例。即判断是否存在对象中。使用时需明确指定类型,如:
if('abc' instanceof string){}
注:instanceof对所有原始值都返回false
>类型转换<
转换为包装类型:new String("abc")
转换为原始类型:new String("abc").valueOf()
尽管是原始类型 number、Boolean、string都有toString()方法,string为伪对象,也存在该方法。
number类型的转换存在整数与浮点数,且存在进制转换,此处不赘述。
强制类型转换
ECMAScript中有三种强制类型转换,结合w3school与实践得出如下结论:
--当要转换的值是至少有一个字符的字符串、非0数字或对象时,Boolean()函数将返回true。如果该值是空字符串、数字0、undefined或null,它将返回false
(2)Number(value) - 把给定的值转换成数字(可以是整数或浮点数)
--输入正确值(如‘4.4.1’则返回NaN)时会根据实际判断调用parseInt还是parseFloat
(3)String(value) - 把给定的值转换成字符串
--同toString() 区别在于null是作为string类型还是null原始值
此处对第一种Boolean转换写例说明
var oFalseObject = new Boolean(false); var bResult = oFalseObject && true; //输出 true //此时比较的是oFalseObject,而不是它的值.由于Boolean表达式将false默认为true,故此处为true
强制转换成字符串和调用 toString() 方法的唯一不同之处在于,对 null 和 undefined 值强制类型转换可以生成字符串而不引发错误:
var s1 = String(null);//"null" var oNull = null; var s2 = oNull.toString(); //Uncaught TypeError: Cannot read property 'toString' of null
以上,Boolean与Number尽量少用,避免类似未知错误。
---------------------------------分割线----------------------------------------------------
本文主要参考:阮一峰的网络日志;W3School与网络。主要作为个人学习记录回顾。