JavaScript 基本数据类型和Object 转换
来源:互联网 发布:淘宝投诉客服电话 编辑:程序博客网 时间:2024/06/05 04:25
JavaScript中的数据类型分为两种:基本数据类型和对象类型,其中对象类型包含对象,数组,以及函数。
基本数据类型
在JavaScript中,包含三种基本的数据类型,字符串(String),数值(Number),布尔值(boolean),下面是一些简单的例子:
1 var str = "Hello, world";//字符串 2 var i = 10;//整型数 3 var f = 2.3;//浮点数 4 5 var b = true;//布尔值
我们可以分别查看变量的值及变量的类型:
1 alert(str); 2 alert(i); 3 alert(f); 4 alert(b); 5 6 alert(typeof str); 7 alert(typeof i); 8 alert(typeof f); 9 alert(typeof b);
在JavaScript中,所有的数字,不论是整型浮点,都属于“数字”基本类型。typeof是一个一元的操作符.
对象类型
这里提到的对象不是对象本身,而是指一种类型,此处的对象包括,对象(属性的集合,即键值的散列表),数组(有序的列表),函数(包含可执行的代码)。
对象类型是一种复合的数据类型,其基本元素由基本数据类型组成,当然不限于基本类型,比如对象类型中的值可以是其他的对象类型实例,我们通过例子来说明:
1 var str = "Hello, world"; 2 var obj = new Object(); 3 obj.str = str; 4 obj.num = 2.3; 5 6 var array = new Array("foo", "bar", "zoo"); 7 8 var func = function(){ 9 print("I am a function here"); 10 } 11
两者之间的转换
类似与Java中基本数据类型的自动装箱拆箱,JavaScript也有类似的动作,基本数据类型在做一些运算时,会临时包装一个对象,做完运算后,又自动释放该对象。我们可以通过几个例子来说明:
1 var str = "JavaScript Kernal"; 2 print(str.length);//打印17
str为一个字符串,通过typeof运算符可知其type为”string”,而:
1 var str2 = new String("JavaScript Kernal"); 2 3 print(typeof str2);
可知,str2的type为”object”,即这两者并不相同,那么为什么可以使用str.length来的到str的长度呢?事实上,当使用str.length时,JavaScript会自动包装一个临时的String对象,内容为str的内容,然后获取该对象的length属性,最后,这个临时的对象将被释放。
而将对象转换为基本类型则是通过这样的方式:通过调用对象的valueOf()方法来取得对象的值,如果和上下文的类型匹配,则使用该值。如果valueOf取不到值的话,则需要调用对象的toString()方法,而如果上下文为数值型,则又需要将此字符串转换为数值。由于JavaScript是弱类型的,所以JavaScript引擎需要根据上下文来“猜测”对象的类型,这就使得JavaScript的效率比编译型的语言要差一些。
valueOf()的作用是,将一个对象的值转换成一种合乎上下文需求的基本类型,toString()则名副其实,可以打印出对象对应的字符串,当然前提是你已经“重载”了Object的toString()方法。
事实上,这种转换规则会导致很多的问题,比如,所有的非空对象,在布尔值环境下,都会被转成true,比如:
1 function convertTest(){ 2 if(new Boolean(false) && new Object() && 3 new String("") && new Array()){ 4 print("convert to boolean") 5 } 6 } 7 8 convertTest();//convert to Boolean
初学者容易被JavaScript中的类型转换规则搞晕掉,很多情况下会觉得那种写法看着非常别扭,其实只需要掌握了规则,这些古怪的写法会大大的提高代码的性能,我们通过例子来学习这些规则:
1 var x = 3; 2 var y = x + "2";// => 32 3 var z = x + 2;// => 5 4 5 print(y); 6 print(z);
通常可以在JS代码中发现这样的代码:
1 if(datamodel.item){ 2 //do something... 3 }else{ 4 datamodel.item = new Item(); 5 }
这种写法事实上具有更深层次的含义:
应该注意到,datamodel.item是一个对象(字符串,数字等),而if需要一个boolean型的表达式,所以这里进行了类型转换。在JavaScript中,如果上下文需要boolean型的值,则引擎会自动将对象转换为boolean类型。转换规则为,如果该对象非空,则转换为true,否则为false.因此我们可以采取这种简写的形式。
类型的判断
typeof并不总是有效的,比如下面这种情况:
1 var obj = {}; 2 var array = ["one", "two", "three", "four"]; 3 4 print(typeof obj);//object 5 print(typeof array); //object
运行结果显示,对象obj和数组array的typeof值均为”object”,这样我们就无法准确判断了,这时候,可以通过调用instanceof来进行进一步的判断:
1 print(obj instanceof Array);//false 2 print(array instanceof Array);//true
第一行代码返回false,第二行则返回true。因此,我们可以将typeof操作符和instanceof操作符结合起来进行判断。
- JavaScript 基本数据类型和Object 转换
- javascript数据类型转换 []+{} 和 {}+[]
- JavaScript数据类型和转换
- 【Java】----数据类型和基本数据类型转换
- JAVA基本数据类型和数据类型转换
- JavaScript基本数据类型和运算
- JavaScript-基本变量和数据类型
- javascript基本数据类型和typeof
- JavaScript基本数据类型和内置数据类型
- JavaScript中的基本数据类型和引用数据类型
- javascript的基本数据类型以及转换
- javascript之数据类型、数据类型的转换、&&和||
- 【Object C】 基本数据类型
- Object C 基本数据类型
- java基本数据类型和基本数据类型的转换
- java String和基本数据类型的转换
- 基本数据类型和字符串的相互转换
- String 和基本数据类型的转换
- ASP.NET页面生命周期描述
- 自定义UITabBar=How to Customize UITabBar on iOS 5
- javascript入门系列演示·三种弹出对话框的用法实例
- string类
- D3D中的向量
- JavaScript 基本数据类型和Object 转换
- error LNK2001: 无法解析的外部符号 "public: static class std::vector<class......
- Eclipse快捷键
- 创建Shp报错 (异常来自 HRESULT:0x80010105 (RPC_E_SERVERFAULT))
- 通过案例说明struts2的工作流程
- 王坚:谷歌害怕我们,云OS的竞争对手只有一个——谷歌
- adroid sdk manager无法更新packege列表
- JS验证控件1.2 新增提示框
- 更改cell字体