在js中,总的来说数据类型分为两大类,一类是原始值类型的,一类是引用类型的。原始值类型的包括:字符串(String) 、数字(Number) 、布尔值(Boolean) 以及两个特殊的值 null 和undefined 。引用类型的主要是指对象,在js中,对象的范围很广,甚至有js中一切都是对象这样的说法。对象可以分为 对象(Object) 以及更具体的数组(Array) 、 函数(Function) 等类型。要注意的是,js中typeof运算符返回的类型只有:sting、number、boolean、object、function、undefined几种,typeof null 返回的是 object,但一般认为null是不属于对象的 .
关于js中是不是一切都是对象这句话,其实是有争议的。例如,我们可以直接在通过单引号或双引号定义的字符串字面量上调用方法:
1
|
'this is a string' .charAt(0);
|
这条语句是能够执行并得到正确结果的。字符串的确是个对象,但是问题在于没有通过构造函数而是直接使用字面量的字符串又算不算对象呢?这还要说吗,这个语句不就是在字符串字面量上调用的方法嘛,能调用方法的当然是对象了。是的,我们看到的的确是这样,但事实又是如何呢?
事实就是,通过字面量定义的字符串并不是对象,或者最多只能说它是个伪对象,因为当在字符串字面量上调用方法或属性时,程序会在背后默默的创建一个与这个字面量的值相等的临时字符串对象,然后再在这个临时对象上调用属性或方法,最后把结果返回去,这个临时字符串对象完成使命后也随之会被销毁。
还有一个有力的证据就是,你可以在字符串字面量上添加一个属性,或者是改变一个属性值,但结果是无法成功的:
1
2
3
|
var s = 'this is a string' ;
s.bar = 'hello' ;
alert(s.bar);
|
得到undefined的原因是,s.bar 这个属性是加在了程序偷偷创建的那个临时字符串对象上,但我们无法得到这个临时字符创对象的引用,而且这个临时字符串对象很快就被销毁了。所以给字符串字面量添加属性或改变属性值是没有任何意义的,因为它根本不会受到影响。
数字字面量以及布尔值字面量也是类似的原理,这里就不再赘述了。
下面进入正题了---js中各种数据类型间的相互转换。
一、转换成布尔值
程序在 if 语句 以及 ||、&&、! 等逻辑判断的环境下会把表达式自动转换成布尔值。
想要手动转换某个东西为布尔值有两种方法:1、使用 !! ; 2、使用 Boolean(),记住前面不要加new;
1、数字转换成布尔值
除了0被转换成false外,所有自他数字都会被转换成true, NaN 也总是被转换成false
2、字符串转换成布尔值
这个更简单,除了空字符串被转换成false外,所有字符串都会被转换成true
3、其他类型转换成布尔值
undefined和null会被转换成false, 任何对象(包括数组)和函数都会被转换成true,记住,是任何
1
2
3
|
var o = new Boolean( false );
alert(o);
alert(!!o);
|
二、转换成字符串
把某一个东西强制转换成字符串有两种方法:
1、数字转换成字符串
这个没什么要说的,数字都是按原样转换成字符串,但用科学计数法表示的数字(也就是带e的)会转换成它内部代表的真实的数字的字符串。
还需要注意的是,当使用二元的加号运算符时,如果两个运算数中有一个不是数字,则会进行字符串的连接操作,而不是数学加法操作,两个运算数都会被转换成字符串。当null与数字相加时,不会进行字符串连接,而是会把null转换成0来进行数学元素。
2、其他类型转换成字符串
当对象或函数转换成字符串时,会调用它们的 toString() 方法来进行转换,默认的是 Object.prototype.toString 和 Function.prototype.toString,但它们是可以被我们自定义的toString方法覆盖的。当把一个函数转换成一个字符串时,不一定就要显示函数的源代码,Function.prototype.toString 方法的结果依赖于它的环境是怎么实现它的。
三、转换成数字
除了加号以外的其他数学运算符,都会进行转换为数字的操作。把一个东西强制转换成数字也有两种方法:
1、字符串转换成数字
除了空字符串会被转换成0以外,如果字符串中是正确的数字书写形式,那么都可以顺利转换成相应的数字,不管是小数、科学计数还是八进制、十六进制形式等。但是如果参杂了其他不能构成数字或不符合数字书写规则的东西,则会被转换成NaN。
NaN是指不是数字的意思,任何数字数字跟NaN进行运算得到的结果都是NaN,NaN甚至跟自己也不相等。
2、其它类型转换成数字
对象和函数总是被转换成NaN, undefined也会被转换成NaN, 但null会被转换成0
上面的表遗漏了数组的情况。数组会首先被转换成字符串,然后再转换成数字。
1
2
3
4
5
|
alert(+[]);
alert(+[1]);
alert(+[1,2]);
alert(+ new Array(1));
alert(+ new Array(1,2));
|
3、两个数字转换函数
parseInt
parseFloat
分享到:
相关推荐
parseInt()-将字符串转化为整型 parseFloat()-将字符串转化为浮点数 ...String()-函数能够将任何类型的值转换为字符串 tostring()-将数字转换为进制 Boolean()-转换为Boolean值 toFixed-()将数值转换为字符串
javascript技巧,JavaScript中数据类型转换总结,轉載自腳本之家
JavaScript程序设计课件:数据类型转换.pptx
对初学者的最全数据类型转换,javascript几种基本的数据类型转换,有数值类型,字符串类型及布尔类型
JavaScript — 数据类型的转换1
认识JavaScript的数据类型;学习目标;认识JavaScript的数据类型; 1.变量的数据类型;基本数据类型-数字型;认识JavaScript的数据类型;... 数据类型转换;认识JavaScript的数据类型;认识JavaScript的数据类型;认识Jav
javascript有两种数据类型的转换方法: (一)将整个值从一种类型转换为另一种数据类型(称作基本数据类型转换) (二)从一个值中提取另一种类型的值,并完成转换工作 基本数据类型转换的三种方法: 1.转换为字符...
主要介绍了JavaScript中的数据类型转换方法,是JavaScript入门学习中的基础知识,需要的朋友可以参考下
当绝没有弱类型那么随便,也就是说变量在声明时不需要指定数据类型,变量由赋值操作确定数据类型),所以在JavaScript的类型转换中就存在了强类型语言所没有的隐式转换。 1.1 JavaScript中的隐式转换(自动类型转换) ...
javascript中,变量可以赋予任何类型的值。但是运算符对数据类型是有要求的,如果运算符的类型与预期不符,就会自动转换类型。数据类型除了可以自动转换以外,还可以手动强制转换。
三、数据类型转换 JS内部提供不同数据类型的自动转换机制,在某处预期为某种类型而不是某种类型时,就会自动转换为预期类型,这就是我们常说的隐式转换。 1、强制类型转换 在了解隐式转换的规则前
JavaScript是一门弱类型(或称动态类型)的语言,即变量的类型是不确定的。下面通过本文给大家分享javascript数据类型转换小结,包括显示转换的数据类型和隐式的数据类型转换,感兴趣的朋友跟随脚本一起看看吧
JavaScript的数据类型分为六种,分别为null,undefined,boolean,string,number,object。object是引用类型,其它的五种...本章节单独介绍一下javascript中的隐式数据类型转换,对于它的良好掌握,在实际应用能够简化很多
JavaScript+js语法基础+js数据类型+js数据类型转换+js运算符 我学习js的第二天,通过老师讲解总结的一份js语法基础,适用于初学者学习js基础语法,知识点相对来说比较细节。
java中数据类型转换.doc
基本涵盖了常用的js数据类型之间互相转换的方法和途径,简单易懂