返回顶部
首页 > 资讯 > 精选 >JavaScrip简单数据类型隐式转换如何实现
  • 906
分享到

JavaScrip简单数据类型隐式转换如何实现

2023-07-06 13:07:46 906人浏览 八月长安
摘要

今天小编给大家分享的是JavaScrip简单数据类型隐式转换如何实现,相信很多人都不太了解,为了让大家更加了解,所以给大家总结了以下内容,一起往下看吧。一定会有所收获的哦。总结javascript是一种弱数据类型语言 ,在JavaScrip

今天小编给大家分享的是JavaScrip简单数据类型隐式转换如何实现,相信很多人都不太了解,为了让大家更加了解,所以给大家总结了以下内容,一起往下看吧。一定会有所收获的哦。

  • 总结

    javascript是一种弱数据类型语言 ,在JavaScript中定义变量不需要提前指定变量类型,变量的数据类型是在程序运行过程中由JavaScript引擎动态决定,因而可以使用同一个变量来存储不同类型的数据(var、let、const),这也意味着它会自动转换值的数据类型,以便数据之间更加容易相互比较和操作。除去我们比较熟知的显式转换,JavaScript中的隐式转换更加需要理解和一定的经验。下面将为大家详细的列举一下js隐式转换的各种情况。

    在JavaScript中,数据类型的隐式转换主要有三种情况:

    • 转换为number类型

    • 转换为boolean类型

    • 转换为string类型

    JavaScript隐式类型转换通常发生在以下情况:

    • 当使用不同类型的值进行操作时(数字和字符串

    • 当使用相等或不等运算符(== 或 !=)进行比较时

    • 当对一个非布尔类型的值进行布尔运算时(if语句或逻辑运算符)

    JavaScrip隐式转换规则

    JavaScript中隐式类型转换的机制是比较复杂的,涉及到了数据类型、操作符、运算顺序等多方面的因素。

    当两个操作数具有不同的类型时,系统内部根据一系列规则来决定将其转换为相同的类型,这些规则包括:

    • 如果一个操作数是数字,则将另一个操作数转换为数字

    • 如果一个操作数是字符串,则将另一个操作数转换为字符串

    • 如果一个操作数是布尔值,则将另一个操作数转换为布尔值

    • 如果一个操作数是对象,则尝试将另一个操作数转换为对象,否则将其转换为原始类型

    另外:

    • + 号两边只要有一个是字符串,都会把另外一个转成字符串

    • 除了+以外的算术运算符 比如 - * / 等都会把数据转成数字类型

    • 逻辑非 ! 转换为布尔

    • +号作为正号解析可以转换成数字型

    • 任何数据和字符串相加结果都是字符串

    JavaScrip简单数据类型隐式转换如何实现

    JavaScrip类型转换详解

    转换成Number类型

    转为Number类型:++ / --(自增自减运算符) + - * / %(算术运算符) > < >= <= == != === !== (关系运算符)。null转换为数字为0undefinedNaN

    简单数据转换数字对照:

    原始数据类型转换之后的值
    空字符 ''或""0
    非空字符串将字符内的数据内容变为数据,如果还有其他符号中文等转为NaN
    true1
    false0
    null0
    undefinedNaN
    NaN(不用转,typeof NaN 得到"number")

    示例:

    // 隐式转换为数字型的运算符// 算术运算符 - *  /   比较运算符  >   ==console.log(8 - '3') // 5console.log('1999' * '2') // 3998,此处两个string型全都得转换为number型console.log('35' - 34)  //1 console.log('35' - '34') //1console.log('40' / '2') //20console.log('35' % 2)  //1console.log('35' % '2') //1console.log(5 - undefined) //NaN 因为Undefined转为数字为NaNconsole.log(5 - null) //5console.log(44%('2a')) //NaN,其中,2a进行强转后为NaN,NaN参与运算返回NaNconsole.log('5'>'3') //true 此处直接比较的ASCII码。console.log(3 > '1')   // trueconsole.log(3 == '3')  // trueconsole.log(3 == '+3')  // true,此处的+号相当于是类型转换console.log(3 == '-3')  // falseconsole.log(3 == '*3')  // falseconsole.log(3 == '/3')  // falseconsole.log(3 == 'a3')  // falseconsole.log('a' == 97)  // falseconsole.log('a' > 'A')  // true 此处比较的是ASCII码,其中a为97 A为65,因此为trueconsole.log('a' > '')  // trueconsole.log('' == 0) //true// + 正号使用的时候,也会把字符串转换为 数字型console.log('123')  // '123'console.log(+'123')  // 123console.log(typeof +'123') // numberconsole.log(+'0x12' == 18) // trueconsole.log('55' + true) //'55true'// undefined、null、boolean类型转换为数字console.log(NaN == NaN) //false,NaN比较特殊,它自己不等于自己console.log(undefined == 0) //falseconsole.log(undefined == NaN) //falseconsole.log(undefined == null) //true,此处undefined和null值都为空,因此能够相等console.log(null == 0) //false  此处没有进行类型转换,因为null是一个值类型,它的数值就是null,我们在使用==时,会直接把null这个数值与0进行比较,结果为falseconsole.log(null === 0) // falseconsole.log(null >= 0) //false  null要进行数值比较,此处便会尝试转为number,则为0,结果为 trueconsole.log(false == null) //false 特殊情况,理论上都应该转换为0比较然后相等true,但实际是直接拿值比较,不会先转为为数字console.log(true == 1) //trueconsole.log(false == 1) //falseconsole.log(true > false) //true 先转化为1和0数字进行比较console.log(true + 1) // 2console.log(true + null) //1,其中true转换为1,null转换为0console.log(undefined + 1) // NaNconsole.log('5' - true) //4console.log('5' - false) //0//数组转换为数字console.log([9] == 9) //trueconsole.log([9,'a'] == 9) //false//特殊情况console.log({} == {}) // false,对象类型比的是地址,不同对象地址不同console.log([]==[])   // false,理由同上

    转换为String类型

    简单数据转换字符串对照:

    原始数据类型转换之后的值
    数字类型数字类型的字符表示
    null&lsquo;null&rsquo;
    undefined&lsquo;undefined&rsquo;
    布尔类型true变&rsquo;true&rsquo;,false变&rsquo;false&rsquo;

    此处注意点为-0转换为string类型为'0'

    ["a","b"]转换string类型为"a,b"

    []转换为string类型为""

    转换为Boolean类型

    数据逻辑判断逻辑运算之中会隐式转换为boolean类型

    转换为布尔型:空字符、0、-0、undefined、null、false、NaN转换为布尔值后为false,其余为true

    + 号两边只要有一个是字符串,都会把另外一个转成字符串

    连续使用两个非操作符(!!)可以将一个数强制转换为boolean类型,这在开发之中比较实用。

    简单数据转换布尔型对照:

    数据类型转换为true的值转换为false的值
    String任何非空字符串空字符串(""或&rsquo;')
    Number任何非零数字0和NaN
    Object任何对象null
    Undefined不适用undefined

    示例:

    //隐式转换为布尔型的运算符  !逻辑非console.log(!true)  // false console.log(!0)  // trueconsole.log(!'')  // trueconsole.log(!null) // trueconsole.log(!undefined)  // trueconsole.log(!NaN)  // trueconsole.log(!false)  // trueconsole.log(!'hello') // false

    JavaScrip特殊操作符对类型转换的影响

    !逻辑非运算符

    !会将后面的数据先转成布尔值,然后取反

    var a; //a = undefinedvar r = !!a; console.log(r) //false!!{} // true!!undefined // false!!null // false!!NaN //fales

    == 相等运算符

    比较操作符会为两个不同类型的操作数转换类型,然后进行严格比较。当两个操作数都是对象时,JavaScript会比较其内部引用,当且仅当他们的引用指向内存中的相同对象时才相等,即他们在栈内存中的引用地址相同。

    类型相同

    如果比较的是两个对象,则比较两个对象的指针是否指向同一个对象

    let a = {}let b = {}a==b //falselet a = {}let b = a;a==b //true

    类型不同

    如果两边类型不同,则两边都尝试转成number类型。对于引用类型,先调用valueOf(),如果能转成数字,则进行比较。不能转成数字就调用toString()方法转成字符串。

    tips:因为null是一个值类型,它的数值就是null,我们在使用==时,会直接把null这个数值与数值进行比较,而不是转换为0

    console.log(3 == '3')  // trueconsole.log(3 == '+3')  // true,此处的+号相当于是类型转换console.log(3 == '-3')  // falseconsole.log(3 == 'a3')  // falseconsole.log(+'0x12' == 18) // trueconsole.log('' == 0) //trueconsole.log(null == 0) //false  此处没有进行类型转换,因为null是一个值类型,它的数值就是null,我们在使用==时,会直接把null这个数值与0进行比较,结果为falseconsole.log(NaN == NaN) //false,NaN比较特殊,它自己不等于自己console.log(undefined == 0) //falseconsole.log(undefined == NaN) //falseconsole.log(undefined == null) //true,此处undefined和null值都为空,因此能够相等

    面试题

    //问题1:console.log(new String('abc') == true)//flase//step1:右侧转成数字1,变成:new String('abc')==1//step2 new String('abc').valueOf()不是数字也不是字符串,再调用toString()'abc' == 1//step3:字符串转数字NaN == 1 //false,NaN和任何类型比较都为false//问题2:console.log({}==true)//false//step1:右侧转成数字{} == 1//step2 {}.valueOf()不是数字也不是字符串,再调用toString()'[object Object]' ==1  //step3:字符串转数字NaN == 1 //false,NaN和任何类型比较都为false//问题3:console.log([]==![])//true//step1:!优先级比==高,先转右边,[]是对象类型,转成布尔值为true,!true就是false[]==false//step2:右侧转成数字为0[]==0//step3:左侧是一个对象,valueOf()转出来不是字符也不是字符串,调用toString(),得到空字符串'' == 0//step4:字符串转成数字0 == 0 //true

    比较运算符

    字符串类型比较大小时,不进行类型转换,而是逐位比较ASCII码,第一位不同则返回结果,否则继续比较第二位,直到某一位不同为止。

    字符串与数字或者boolean与数字比较时,会进行隐式数据类型转换

    示例

    console.log('5555555' < '6') //true,首先比较第一个字符串的第一个字符,如果不同直接返回结果console.log('5'>'3') //true,此处直接比较的ASCII码。console.log(3 > '1') // trueconsole.log('a' > 'A')  // true,此处比较的是ASCII码,其中a为97 A为65,因此为trueconsole.log('a' > '')  // trueconsole.log(null >= 0) //false,null要进行数值比较,此处便会尝试转为number,则为0,结果为 true

    + 算数运算符

    +号作为一元操作符时,它就会将这个数转换为数字类型

    +号作为二元操作符时

    console.log(3 == '+3')  // true,此处的+号相当于是类型转换console.log('55' + true) //'55true'console.log(true + 1) // 2console.log(true + null) //1,其中true转换为1,null转换为0console.log(undefined + 1) // NaN

    + 号两边只要有一个是字符串,都会把另外一个转成字符串,此时+号为连接符

    总结

    JavaScrip简单数据类型隐式转换如何实现

    关于JavaScrip简单数据类型隐式转换如何实现就分享到这里了,希望以上内容可以对大家有一定的参考价值,可以学以致用。如果喜欢本篇文章,不妨把它分享出去让更多的人看到。

    --结束END--

    本文标题: JavaScrip简单数据类型隐式转换如何实现

    本文链接: https://lsjlt.com/news/358549.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    猜你喜欢
    • JavaScrip简单数据类型隐式转换如何实现
      今天小编给大家分享的是JavaScrip简单数据类型隐式转换如何实现,相信很多人都不太了解,为了让大家更加了解,所以给大家总结了以下内容,一起往下看吧。一定会有所收获的哦。总结JavaScript是一种弱数据类型语言 ,在JavaScrip...
      99+
      2023-07-06
    • JavaScrip简单数据类型隐式转换的实现
      目录JavaScrip隐式转换规则JavaScrip类型转换详解转换成Number类型转换为String类型转换为Boolean类型JavaScrip特殊操作符对类型转换的影响!逻辑...
      99+
      2023-05-20
      JavaScrip 数据类型隐式转换 JavaScrip  隐式转换
    • Oracle中如何实现隐式数据类型转换
      这篇文章主要介绍Oracle中如何实现隐式数据类型转换,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!隐式数据类型转换        &n...
      99+
      2023-06-03
    • MySQL-数据类型隐式转换
      MySQL-数据类型隐式转换 关键字问题描述解决问题思路问题总结 关键字 数据类型不同导致隐式转换 问题描述 SQL 一: select id,sku,weight,image_...
      99+
      2023-09-08
      mysql sql
    • 详解C#如何实现隐式类型转换
      目录预期效果static using 与 global using隐式类型转换实现 Result 类型Result 类型是许多编程语言中处理错误的常用方式,包括 C# 的 dotNe...
      99+
      2023-01-05
      C#实现隐式类型转换 C#隐式类型转换 C# 类型转换
    • SQL Server 中数据类型怎么实现隐式转换
      本篇文章为大家展示了SQL Server 中数据类型怎么实现隐式转换,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。如下所示: CREATE TA...
      99+
      2024-04-02
    • C#数据类型转换(显式转型、隐式转型、强制转型)
      C# 的类型转换有显式转型 和 隐式转型 两种方式。 显式转型:有可能引发异常、精确度丢失及其他问题的转换方式。需要使用手段进行转换操作。隐式转型:不会改变原有数据精确度、引发异常,...
      99+
      2024-04-02
    • Python数据类型转换如何实现
      这篇文章主要介绍了Python数据类型转换如何实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python数据类型转换如何实现文章都会有所收获,下面我们一起来看看吧。基本类型转换python3与python2...
      99+
      2023-07-04
    • JavaScript中的隐式类型如何转换
      这篇文章主要介绍“JavaScript中的隐式类型如何转换”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JavaScript中的隐式类型如何转换”文章能帮助大家解决问题。为什么会出现隐式类型转换这个...
      99+
      2023-07-05
    • PHP类型的隐式转换怎么实现
      本篇内容主要讲解“PHP类型的隐式转换怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“PHP类型的隐式转换怎么实现”吧!一、基本数据类型在PHP中,基本数据类型有四种,分别是整型(int)...
      99+
      2023-07-05
    • SQL Server 中的数据类型隐式转换问题
      写这篇文章的时候,还真不知道如何取名,也不知道这个该如何将其归类。这个是同事遇到的一个案例,案例比较复杂,这里抽丝剥茧,仅仅构造一个简单的案例来展现一下这个问题。我们先构造测试数据,如下所示: CRE...
      99+
      2024-04-02
    • PHP如何实现数据类型永久转换
      这篇文章将为大家详细讲解有关PHP如何实现数据类型永久转换,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。永久转换<php  $old=500;   ...
      99+
      2023-06-17
    • R语言如何实现list类型数据转换
      这篇文章主要介绍“R语言如何实现list类型数据转换”,在日常操作中,相信很多人在R语言如何实现list类型数据转换问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”R语言如何实现list类型数据转换”的疑惑有所...
      99+
      2023-06-08
    • mysql 数据类型转换的实现
      一、问题 有一张如下图所示的表,需要我们查出 result 值大于 reference_high值的数据 然后我们写了下面的SQL查询语句 SELECT i.result,i.reference_hig...
      99+
      2022-05-25
      mysql 数据类型转换 mysql 转换数据类型
    • numpy数据类型dtype转换实现
      这篇文章我们玩玩numpy的数值数据类型转换 导入numpy >>> import numpy as np 一、随便玩玩 生成一个浮点数组 >...
      99+
      2024-04-02
    • java如何实现类型转换与强制类型转换
      这篇文章主要介绍了java如何实现类型转换与强制类型转换,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。java类型转换与强制类型转换如果你以前有编程经验,那么你已经知道把一种...
      99+
      2023-06-03
    • mysql如何转换数据类型
      这篇文章主要介绍“mysql如何转换数据类型”,在日常操作中,相信很多人在mysql如何转换数据类型问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”mysql如何转换数据类型”...
      99+
      2024-04-02
    • mysql数据类型如何转换
      在 mysql 中转换数据类型的方法包括:使用 alter table 语句指定要更改类型的表和列;使用 cast() 函数临时将表达式的值转换为指定的类型;创建具有所需数据类型的新表并...
      99+
      2024-06-15
      mysql 数据丢失
    • MySQL如何实现类型转换
      这篇文章主要介绍了MySQL如何实现类型转换,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。类型转换命令: CAST(expr AS type...
      99+
      2024-04-02
    • javascript如何实现类型转换
      这篇文章给大家分享的是有关javascript如何实现类型转换的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。方法:1、使用“+”运算符自动进行转换。2、使用JS内置的函数进行转换,例toString()和Stri...
      99+
      2023-06-14
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作