javaScript 基本类型之间转换

时间:2023-02-18 18:46:50

在Java中,基本类型之间的强制转换也不是这样的,比如,整数要转换成字符串,必须使用Integer.toString()静态方法或者String.valueOf()静态方法,把字符串转换为整数,必须使用Integer.valueOf()。
可见,不能把JavaScript中的类型转换看作为“强制类型转换”。
在JavaScript中,Double类型和Int类型都是看作为Number对象,因此无论是typeof 1还是typeof 1.0,都是返回number。这样我们可以不用去管是Int还是Double类型,让JavaScript解释引擎内部去处理。

  • 如果要把Number转换成String,可以使用Number的toString()方法,(象(1).toString()括号必须或者 1
    .toString()空格必须,否则会编译出错,如果是变量则无需),或者调用String()函数,这两种方法都会自动调用解释引擎内部的
    NumberToString(),或者根据进制调用其它函数,基本类似。
  • 如果要把String转换成Number,可以使用Number()函数,他会自动判断String中是整数还是浮点数,然后内部使用相应的数据
    类型,另外可以使用全局函数parseInt()和parseFloat(),他们根据你的要求进行转换。同样的,他们在解释引擎内部机制上是使用了
    StringToNumber,StringToInt等等内部的函数。
  • 而如果是Double转换成Int,必须使用Math.floor()函数(截尾取整)或者Math.round()(四舍五入)
  • Int转换成Double,无须考虑任何问题,直接把Int当成Double进行运算

注:Number、String函数是特殊的函数,在JS引擎中,他会自动判断是作为构造函数调用还是普通调用,所以既可以使用new关键字,也可以作为函数直接调用。
关于JS的参考手册,微软有一个CHM十分不错,指南、API参考都有,是Windows脚本技术,中文版,我在MSDN上下载的。而关于JS解释引擎的,我参考的是Netscape的Spidermonkey,现在由Mozilla组织维护。

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

<this.all.length;i++){
javaScript 基本类型之间转换   vTotal+=Number(this.all[i].Value);
javaScript 基本类型之间转换   
javaScript 基本类型之间转换  }

得出是数字的累加
不然成字符串连接了

众所周知,JavaScript 是一种弱类型的脚本语言。其在声明变量时,无须指定数据类型,这也就给予了JavaScript所需要的灵活性和简单性。JavaScrip对数据类型的灵活处理方式的一个重要体现是自动类型转换。今天,我就把书中的这个JavaScript数据类型自动转换的表抄给大家。让兄弟们做到心中有数。

字符串 数字 布尔值 对象
定义的值 “undefined” NaN false Error
null “null” 0 false Error
非空字符串 As is 字符串中的数字值或NaN true String对象
空字符串 As is 0 false String对象
0 “0″ As is false Number对象
NaN “NaN” As is false Number对象
无穷大 “Infinity” As is true Number对象
负无穷大 “-Infinity” As is true Number对象
其他所有数字 数字的字符串值 As is true Number对象
True “true” 1 As is Boolean对象
false “false” 0 As is Boolean对象
对象 toString() valueOf()或toString()或NaN true As is

简单说明一下,这个as is 的意思应该是——和它原来的一样。即,比如最后一行的对象,在被当做对象时,其应该没有变化,即还是被当作自身的对象。

引用
javaScript支持自动类型转换:
  1. <script>
  2. var a = "3.145";
  3. var b = a - 2;//将a的类型转换成数字;
  4. var c = a + 2;//将a的类型转换成字符串;
  5. alert (b + "\n" + c);
  6. </script>
引用
JavaScript还提供几个支持强制类型转换的函数。
  • toString():将布尔值、数字等转换成字符串。
  • parseInt():将字符串、布尔值等转换成整数。
  • parseFloat():将字符串、布尔值等转换成浮点数。
  • eval():将字符串表达式转换成数字值。例如,语句total=eval("432.1*10")的结果是total=4321即将数值4321赋予total变量。
  1. <script>
  2. var a = "3.145";
  3. var b = a + 2;
  4. var c = parseFloat(a) + 2;
  5. alert (b + "\n" + c);
  6. </script>
引用
各种类型向数字转换的结果如下:
  • undefined值:转换成NaN。
  • null值:转换成0.
  • 布尔值:值为true,转换成1;值为false,转换成0.
  • 字符串值:如果字符串是数字形式,转换成数字,否则转换成NaN。
  • 其他对象:转换成NaN.
引用
各种类型向字符串转换的结果如下:
  • undefined值:转换成"undefined"。
  • null值:转换成"null".
  • 布尔值:值为true,转换成"true";值为false,转换成"false".
  • 数字型值:NaN或数字型变量的完整字符串。
  • 其他对象:如果该对象的toString()方法存在,则返回toString方法的返回值,否则返回undefined.
引用
各种类型向布尔型转换的结果如下:
  • undefined值:转换成"false。
  • null值:转换成false。
  • 字符串值:如果字符串为空字符串,返回false;否则返回true。
  • 数字型值:如果数字为0或NaN,返回false。;否则返回true。
  • 其他对象:总是返回true;

在Java中,基本类型之间的强制转换也不是这样的,比如,整数要转换成字符串,必须使用Integer.toString()静态方法或者String.valueOf()静态方法,把字符串转换为整数,必须使用Integer.valueOf()。
可见,不能把JavaScript中的类型转换看作为“强制类型转换”。
在JavaScript中,Double类型和Int类型都是看作为Number对象,因此无论是typeof 1还是typeof 1.0,都是返回number。这样我们可以不用去管是Int还是Double类型,让JavaScript解释引擎内部去处理。

  • 如果要把Number转换成String,可以使用Number的toString()方法,(象(1).toString()括号必须或者 1
    .toString()空格必须,否则会编译出错,如果是变量则无需),或者调用String()函数,这两种方法都会自动调用解释引擎内部的
    NumberToString(),或者根据进制调用其它函数,基本类似。
  • 如果要把String转换成Number,可以使用Number()函数,他会自动判断String中是整数还是浮点数,然后内部使用相应的数据
    类型,另外可以使用全局函数parseInt()和parseFloat(),他们根据你的要求进行转换。同样的,他们在解释引擎内部机制上是使用了
    StringToNumber,StringToInt等等内部的函数。
  • 而如果是Double转换成Int,必须使用Math.floor()函数(截尾取整)或者Math.round()(四舍五入)
  • Int转换成Double,无须考虑任何问题,直接把Int当成Double进行运算

注:Number、String函数是特殊的函数,在JS引擎中,他会自动判断是作为构造函数调用还是普通调用,所以既可以使用new关键字,也可以作为函数直接调用。
关于JS的参考手册,微软有一个CHM十分不错,指南、API参考都有,是Windows脚本技术,中文版,我在MSDN上下载的。而关于JS解释引擎的,我参考的是Netscape的Spidermonkey,现在由Mozilla组织维护

<this.all.length;i++){
javaScript 基本类型之间转换   vTotal+=Number(this.all[i].Value);
javaScript 基本类型之间转换   
javaScript 基本类型之间转换  }

得出是数字的累加
不然成字符串连接了

下面的表格总结了javascript中的每一种转换,并且针对一种特定类型的值用于特定环境中给出了所执行的转换。

javascript自动数据类型转换表

字符串 数字 布尔值 对象
定义的值 “undefined” NaN false Error
null “null” 0 false Error
非空字符串 不变 字符串中的数字值或NaN true String对象
空字符串 不变 0 false String对象
0 “0″ 不变 false Number对象
NaN “NaN” 不变 false Number对象
无穷大 “Infinity” 不变 true Number对象
负无穷大 “-Infinity” 不变 true Number对象
其他所有数字 数字的字符串值 不变 true Number对象
True “true” 1 不变 Boolean对象
false “false” 0 不变 Boolean对象
对象 toString() valueOf()或toString()或NaN true 不变

写在这里以备查看。

这再记录点容易出问题的东东:

1. 虽然undefined和null值不同,但是 ==运算符却将两者看作相等。看如下的表达式:

my.pro == null;//return: ture

如果属性my.pro并不存在,或者它存在但是值为null,那么这个比较表达式的值为true。由于null和undefined都表示缺少值,所以这种相等性正是我们想要的。但是如果必须去人这两者,可以使用===运算符或者typeof运算符。

2.NaN

当一个算数运算(如用0来除0)产生了未定义的结果或错误时,就会返回另一个特殊的javascript数值。这种情况下结果是一个非数字的特殊值,输出为NaN。它和任何值都不相等包括它本身,可以用isNaN()来检测这个值。

javaScript 基本类型之间转换的更多相关文章

  1. javascript 操作符类型隐性转换

    javascript 操作符类型隐性转换 (一).一元操作符只能操作一个值的操作符叫做一元操作符1.递增和递减操作符a. 在应用于一个包含有效数字字符的字符串时,先将其转换为数字值,再执行加减1的操作 ...

  2. JavaScript的类型自动转换高级玩法JSFuck

    0 前言 最开始是不小心在微信公众号(程序员大咖)看到一篇JS的高逼格代码,然后通过里面的链接跳转到了JSFuck的wiki,就像顺着迷宫找宝藏的感觉,感叹JS的自动类型转换的牛逼. 1 样例 (!( ...

  3. opencv中Mat与IplImage&comma;CVMat类型之间转换

    opencv中对图像的处理是最基本的操作,一般的图像类型为IplImage类型,但是当我们对图像进行处理的时候,多数都是对像素矩阵进行处理,所以这三个类型之间的转换会对我们的工作带来便利. Mat类型 ...

  4. JavaScript的类型自动转换样例集合处

    1.前言 如果Javascript期望使用一个字符串,它会把给定的值转换成字符串:如果Javascript期望使用一个数字,它会把给定的值转化成数字. 2.样例 2.1.字符串拼接时有数字 windo ...

  5. Java数值类型之间转换

    Java之间的数值转换如图所示,实心箭头代表无数据丢失,虚线箭头代表可能丢失 例如:123456789是一个大的整数,包含的位数比float类型能够表达的位数多,但这个数转换为float类型时,将会得 ...

  6. JAVA-各种类型之间转换 parse&lpar;&rpar; 与valueOf&lpar;&rpar;

    类型互转 1.各种类型转String 2.String转Bytes 3.数组转List 4.进制转换 5. parse 在 SimpleDateFormat 中是转换为Date类,其它的一些包装类都是 ...

  7. go语言-数据类型及类型之间转换

    数据类型分类 一.数据类型-基本数据类型 1.整数型(int.有符号(int8/1字节.int16/2字节.int32/4字节.int64/8字节).无符号(uint.uint8.uint16.uin ...

  8. Java中int和String类型之间转换

    int –> String int i=123; String s=""; 第一种方法:s=i+""; //会产生两个String对象 第二种方法:s=S ...

  9. go byte 和 string 类型之间转换

    string 不能直接和byte数组转换 string可以和byte的切片转换 1,string 转为[]byte var str string = "test" var data ...

随机推荐

  1. 简单分析JavaScript中的面向对象

    初学JavaScript的时候有人会认为JavaScript不是一门面向对象的语言,因为JS是没有类的概念的,但是这并不代表JavaScript没有对象的存在,而且JavaScript也提供了其它的方 ...

  2. New full duplex HTTP tunnel implementation &lpar;client and server&rpar;

    https://issues.jboss.org/browse/NETTY-246?page=com.atlassian.jirafisheyeplugin:fisheye-issuepanel —— ...

  3. (转)Eclipse中junit框架的使用——单元测试

    [转]junit浅学笔记一 JUnit是一个回归测试框架(regression testing framework).Junit测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何(How ...

  4. CentOS系统下做nginx和tomcat负载均衡

    系统总是频繁更新,为了避免更新系统的时候领导看不到东西,打算用ngix做代理,后台部署两个tomcat做负载均衡,避免更新一台就无法使用系统的问题,这两天看了写资料,把几个关键点记录在这里以便备忘. ...

  5. 用extjs6&period;0写一个点击新建窗口的功能

    一.写一个按钮 注意id { id: 'ListEdit', text:'编辑', iconCls:'x-fa fa-edit' } 二.写新建的页面 下面我新建的是表单,有几点需要注意的: ① 因为 ...

  6. 【转】 中兴OLT-C300常用命令

    中兴OLT C300show running-config (加载各种板卡)show gpon onu uncfg (查看OLT所有未配置的ONU)show gpon onu uncfg gpon-o ...

  7. Css中的盒子结构padding和margin的区别

    之前写过一个padding和marfgin的区别的博客见地址:http://blog.csdn.net/qq_32059827/article/details/50998965.那里只是笼统介绍了一下 ...

  8. xadmin的使用

    01-下载源码 GitHub地址:https://github.com/sshwsfc/xadmin # 安装xadmin 由于使用的是Django2.0的版本,所以需要安装xadmin项目djang ...

  9. 【codevs4919】线段树练习4

    题目大意:维护一个长度为 N 的序列,支持两种操作:区间加,区间查询有多少数是 7 的倍数. 题解:在每个线段树中维护一个权值数组 [0,6],由于个数显然支持区间可加性,因此可用线段树来维护. 代码 ...

  10. jdbc数据访问技术

    jdbc数据访问技术 1.JDBC如何做事务处理? Con.setAutoCommit(false) Con.commit(); Con.rollback(); 2.写出几个在Jdbc中常用的接口 p ...