JavaScript数据类型转换原则详解

javascript是一门弱类型(或称动态类型)的语言,即变量的类型是不确定的。下面通过本文给大家分享javascript数据类型转换小结,包括显示转换的数据类型和隐式的数据类型转换,希望能帮助到大家。

我们都知道JavaScript是一门弱类型(或称动态类型)的语言,即变量的类型是不确定的。

var num = 123 ; //123var num = 'HAHAHA' + num ; // "HAHAHA123"

登录后复制

上面的代码中,变量num起初是一个数值,后来又变成一个字符串。变量类型完全由当前值决定。这种类型就叫弱类型。

我们知道,在编程语言中,数据本身和运算之间都是有类型的。

在强类型的编程语言中,不同类型的变量是不能直接进行运算的。

立即学习“Java免费学习笔记(深入)”;

但是在弱类型语言中不同类型的变量却是可以直接相加,因此在运算中就需要转换数据的类型。这种数据类型的转换大多数情况下都是自动转换的,但有时却是需要手动强制转换,

在进行数据类型转换之前,我们先来了解一下JavaScript的数据类型有哪些。

5中基本数据类型:number ,string , boolean , undefined , unll .

一种复杂的数据类型: Object .

有时候我们需要知道一个变量的数据类型时,可以通过typeof()来操作。返回值的类型为:string 。

  var arr = [undefined , true , 'world' , 123 , null , new Object , function () {}]  for ( i = 0; i < arr.length; i ++) { console.log(typeof(arr[i]));  }

登录后复制

输出的结果为:undefined , boolean , string , number , object , object , function

null明明是基本数据类型呀,为什么输出的结果是Object.这是因为null被认为是空的对象引用。记住即可。

函数不是数据类型,但是调用typeof后为什么会出现function类型呢。从技术的角度看,函数是对象。但是也有一些特殊的属性,因此利用typeof来区分函数和对象是有必要的。

显式转换的数据类型

1、将非数值转换为数值类型的函数

有3个函数可以把非数值转换为数值:Number()、parseInt()、parseFloat()。

第一个函数Number(mix),可以用于任何数据类型,该函数先将mix的数据类型转换为number类型,然后再将mix的值转换为数值。

若mix的值能直接转换成数字,则直接显示。若不能则显示0或NaN.

JavaScript数据类型转换原则详解

而另两个函数则专门用于把字符串转换成数值。

parseInt(string)函数:将字符串转换为数值,不遵循四舍五入。这里的string必须是数字类型的开头字符串,一直遍历到非数值的那个字符才停止。若不是数字开头,则会显示NaN.

var num = ["123" , "124.4" , "234asd" , "asf456"] ;  for (i = 0; i < num.length; i++) {   console.log(parseInt(num[i]));  }

登录后复制

执行结果为:123 , 124 , 234 , NaN .

parseFloat(string):将string转换为浮点数。从数字位开始看,直到非数字位结束,用法与parseInt(string)一致。

parseInt()函数还有另一种用法。parseInt(string,radix):以radix为基底,将string转换成十进制的整数。radix的取值为2-32。

2、将其它类型的数据转换为字符串类型的函数

有两个函数可以把其他数据类型转换为字符串。toString() 和 string() 。

String(mix):将mix转换成字符串类型。该函数可以将任何数据类型的值转换为字符串。

toString()函数有两种用法。,

用法一:demo.toString():将demo转换成字符串类型。demo不能等于null undefined

用法二:demo.toString(radix):将十进制的数demo转换为目标进制的数。如123.0.toString(8)为将十进制数字123转换为8进制的字符串。

    注:不能写成123.toString(8) . 因为浏览器解析的时候会解析成小数。

//例题:把一个二进制的数10001000转换成十六进制的数。

//思路:先把二进制转换成十进制,再由十进制转换成十六进制。

var num1 = parseInt('10001000',2);  //136var num2 = num1.toString(16);  //'88'

登录后复制

3、将值转换成布尔值类型

Boolean(变量):将一个值转换成其对应的布尔值。

(1)原始类型值的转换方法

以下六个值的转化结果为false,其他的值全部为true。

undefined

null

-0

+0

NaN

”(空字符串)

(2)对象的转换规则

所有对象的布尔值都是true,甚至连false对应的布尔对象也是true。

Boolean(new Boolean(false))// true

登录后复制

请注意,空对象{}和空数组[]也会被转成true。

Boolean([]); // trueBoolean({}); // true

登录后复制

隐式的数据类型转换

隐式类型的转换是系统进行运算时自动进行的,但是调用的方法都是显式类型转换的方法。

1、递增和递减操作符

      a++ ,a– ,++a , –a

       这4个操作符对任何值都适用,也就是他们不仅适用于整数,还可以用于字符串、布尔值、浮点数值和对象,此时伴随着隐式的数据类型转换。

即先将变量通过Number()转换成number的数据类型,然后再进行递增、递减操作。

JavaScript数据类型转换原则详解

2、(+)(-),即正负号

不仅适用于整数,还可以用于字符串、布尔值、浮点数值和对象。将变量通过Number()转换成number的数据类型。

3、isNaN(变量)

执行过程为:即先将变量通过Number转换,再进行isNaN() 。

4、(+) 加号

先看下面的一段代码

 var str = 1 + "1"; var num = 1 + 1; var num1 = 1 + false; document.write(str , "
" , num , "
" , num1);

登录后复制

执行结果为:11 , 2 ,1

所以加法有两个作用。如果没有运算过程中没有字符串时,就将变量通过Number()转换为number类型后,再进行运算。如果有字符串的话,加号两边起的就是字符串连接作用。

5、-  *  /  %  减号,乘号,除号,取余 

运算时把数据转换成number类型后,再进行运算。

6、&&  ||  !    与或非运算 

将运算符两边的值转换成通过Boolean()函数转换成布尔类型,然后再进行运算。不同的是,&&  ||  返回的是比较后自身的原值,而 !运算返回的是布尔值.

看一个例子。

  console.log(5 && 3);  //从左往右判断,如果全都为真,则返回最后一个为真的值,只要有一个判断为假,就返回为假的那个值  console.log(0 || 2);  //从左往右判断,返回第一个为真的值,若完成了全部的判断且所有的值都为假,就返回最后为假的那个值   console.log(!3); 

登录后复制

返回的结果为:3 , 2 , false.

7、 =  ==  !=  比较运算符

当数字和字符串比较大小时,会隐示将字符串转换成number类型进行比较。而当字符串和字符串比较大小时,则比较的是ascii码的大小。最后返回的则是布尔值

  //1)纯数字之间比较  alert(1<3);//true  //2)数字字符串比较,会将其先转成数字  alert("1"<"3");//true  alert("123"<"123");//false  //3)纯字符串比较,先转成ascii码  alert("a"<"b");//true  alert("abc"<"aad");//false,多纯字母比较,会依次比较ascii码  //4)汉字比较  alert("我".charCodeAt());//25105  alert("的".charCodeAt());//30340  alert("我"<"的");//true,汉字比较,转成ascii码  //5)当数字和字符串比较,且字符串为数字。则将数字字符串转为数字  alert(123"abc");//false

登录后复制

  下面看一种特殊情况。

   //undefined不发生类型转换 console.log(undefined == undefined);  //true console.log(undefined == 0);       //false console.log(undefined > 0);        //false console.log(undefined  0);          //false console.log(null < 0);          //false console.log(undefined == null);    //true   console.log(NaN == NaN);        //false. not a number 不等于任何东西,包括它自己

登录后复制

  关于 == 的隐式类型转换,可以看博客:http://www.jb51.net/article/136521.htm

在项目工程中,如果用 == 来判断两个数值是否相等,由于会发生隐式类型转换。所以是非常存在非常大的漏洞的。为了解决这一问题。引入了 === (绝对等于)和 !==(绝对不等于)。

 console.log(1 === "1"); //false console.log(1 === 1);   //true

登录后复制

相关推荐:

PHP数据类型转换的转换

JS数据类型转换总结

JavaScript中关于数据类型转换的具体分析

以上就是JavaScript数据类型转换原则详解的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2782223.html

(0)
上一篇 2025年3月8日 16:27:26
下一篇 2025年3月1日 01:22:44

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 怎样让js暂停执行

    这次给大家带来怎样让js暂停执行,让js暂停执行的注意事项有哪些,下面就是实战案例,一起来看一下。 JavaScript是一门单线程但是可处理异步任务的脚本语言,是没有提供sleep等类似的方法的,当有需求需要暂停js脚本时,可以使用以下的…

    2025年3月8日 编程技术
    200
  • js怎样判断浏览器的信息

    这次给大家带来js怎样判断浏览器的信息,关于js获取各种浏览器信息,例如微信浏览器,qq内置浏览器,电脑火狐浏览器,qq浏览器等等的注意事项有哪些,下面就是实战案例,一起来看一下。 判断手机相关浏览器 if (browser.version…

    编程技术 2025年3月8日
    200
  • JS怎样刷新父页面

    这次给大家带来JS怎样刷新父页面,JS刷新父页面的注意事项有哪些,下面就是实战案例,一起来看一下。 用iframe、弹出子页面刷新父页面iframe parent.location.reload(); 登录后复制 弹出子页面 window.…

    编程技术 2025年3月8日
    200
  • ajax前端的关联数组转json到后台方法

    这次给大家带来ajax前端的关联数组转json到后台方法,ajax前端的关联数组转json到后台的注意事项有哪些,下面就是实战案例,一起来看一下。 很多人碰到过ajax传值时无法直接传数组,而百度的大多数都是不能用的 所以我想到了一个方法:…

    2025年3月8日
    200
  • 让JS自动匹配出proto Js的方法

    这次给大家带来让JS自动匹配出proto Js的方法,JS自动匹配出proto Js的方法的注意事项有哪些,下面就是实战案例,一起来看一下。 在与后端的WebSocket通信时,前端要带一个proto文件是一个累赘的事情。首先是明显的曝光了…

    2025年3月8日
    200
  • 有趣的UglifyJS

    这次给大家带来有趣的uglifyjs,使用uglifyjs的注意事项有哪些,下面就是实战案例,一起来看一下。 也不是闲着没事去看压缩代码,但今天调试自己代码的时候发现有点意思。因为是自己写的,虽然压缩了,格式化之后还是很好辨认。当然作为mi…

    2025年3月8日
    200
  • protobuf.js 与 Long.js的使用详解

    这次给大家带来protobuf.js 与 long.js的使用详解,是急用protobuf.js 与 long.js的注意事项有哪些,下面就是实战案例,一起来看一下。 protobuf.js的结构和webpack的加载之后的结构很相似。这样…

    2025年3月8日
    200
  • JS事件先发布后订阅的方法

    这次给大家带来js事件先发布后订阅的方法,实现js事件先发布后订阅的注意事项有哪些,下面就是实战案例,一起来看一下。 之前写过一个的事件管理器,就是普通的先订阅后发布模式。但实际场景中我们需要做到后订阅的也能收到发布的消息。比如我们关注微信…

    2025年3月8日
    200
  • JavaScript关于IE8兼容问题的处理

    这次给大家带来JavaScript关于IE8兼容问题的处理,JavaScript关于IE8兼容问题处理的注意事项有哪些,下面就是实战案例,一起来看一下。 最初对做兼容性的认知只停留在UI层面,但其实UI层面都还好,因为毕竟你可以直接看得见现…

    2025年3月8日 编程技术
    200
  • JS里特别好用的轻量级日期插件

    这次给大家带来JS里特别好用的轻量级日期插件,使用JS里特别好用轻量级日期插件的注意事项有哪些,下面就是实战案例,一起来看一下。 jquery的日期插件有好几款,H5中的input也可以自带日期选择。但为什么要再写一个,有两个理由,一个是引…

    2025年3月8日
    200

发表回复

登录后才能评论