精华内容
下载资源
问答
  • js中隐式转换,就是在进行一些运算时,js在解析过程,自动的调取一些函数或方法,按照一定的规则,进行数据类型的转换,从而完成运算的过程。 为了充分的理解隐式转换,下面从数据类型、类型转换的方法、运算符三...

    js中隐式转换,就是在进行一些运算时,js在解析过程中,自动的调取一些函数或方法,按照一定的规则,进行数据类型的转换,从而完成运算的过程。
    为了充分的理解隐式转换,下面从数据类型、类型转换的方法、运算符三个维度来进行总结。

    首先来捋一捋基础:

    js中的数据类型分为:Number、String、Boolean、Null、Undefined、Object六大类型。其中Number、String、Boolean为简单数据类型,Object为复杂数据类型,Null、Undefined为空类型。
    常见的类型转换方法:
    1.转数字类型:Number()、parseInt()、parseFloat()
    2.转字符串:String()、对象.toString()
    3.转布尔值:Boolean()
    运算符及其优先级:(见下图)
    在这里插入图片描述
    (一些常见的显示转换):

    Number(NaN); //NaN
    String(NaN); //"NaN"
    Boolean(NaN); //false
    
    Number(null); //0   数字0
    String(null); //"null"
    Boolean(null); //false
    
    Number(undefined); //NaN
    String(undefined); //"undefined”
    Boolean(undefined); //false
    
    Number(''); //0   数字0
    String(''); //""
    Boolean(''); //false
    
    Number('0'); //0   数字0
    String('0'); //"0”
    Boolean('0'); //true
    
    Number(false); //0   数字0
    String(false); //"false”
    Boolean(false); //false
    
    Number([]); //0   数字0
    String([]); //""
    Boolean([]); //true
    
    Number({})); //NaN
    String({})); //"[object Object]"
    Boolean({})); //true
    

    接下来进入正题:
    在运算中,隐式转换首先要遵循的就是运算符的优先级.
    在以下操作符解析时,会进行以下隐式转换:
    ① ! 逻辑取反。 所有类型(包括对象)直接执行Boolean()转成布尔类型 。然后再做取反!操作。
    ② + 二元加法运算符。 如果算式内有 字符串 那么+两端的任何数据类型都转成字符串,进行字符串拼接;
    但是如果算式内没有字符串,也没有复杂类型,那么就会对其他类型的数据执行Number()操作,转成number类型,再进行加法运算,
    如果数据类型是对象,那么先调用它的valueOf()或toString()方法(具体用那种转换方式?一般情况会默认调用valueOf(),没有valueOf()或得到的不是原始值则调用toString()),然后再执行Number()。
    ③ 其它情况下:
    对非数字的数据类型执行Number()转型操作,转成数字。
    如果数据类型是对象,那么先调用它的valueOf()或toString()方法(具体用那种转换方式?一般情况会默认调用valueOf(),没有valueOf()或得到的不是原始值则调用toString()),然后再执行Number()。
    ④ 几个特殊理解的情况:
    ❶ NaN和任和都不相等,包括它自己。进行任何比较运算都是false。进行任何算数运算结果都是NaN。
    ❷ 进行位运算时,NaN、Infinity(无穷),这两个在进行位操作时会被当做0来处理。(这是由于在位运算时,要从存储时的64位变成位运算的32位,而产生的负效应)
    ❸null 除了自己和undefined外,其它任何类型都不相等。
    undefined 除了自己和null外,其它任何类型都不相等。
    其它情况下遵循③。
    ❹ 字符串之间的比较运算,比较的是字符编码。从左往右,对位比较。长度不一,后面补0.
    ❺复杂类型之间的比较是内存地址的比较。
    ❻所有的复杂类型转换成布尔类型都是true。
    ❼{} + [];//0 原因:当{}既可以被理解为"复合语句块"也可以被理解为"对象直接量"或"函数声明"的时候,JavaScript将会将其理解成为复合语句块。根据语句优先原则,{}被理解为复合语句块,因此相当于 {}; +[]。[]为空,Number([])为0,所以结果为0。
    ❽(这条不算特殊,写这里看看+±-过程)前置++ 前置-- 后置++ 后置-- 。对非数字的数据类型,先执行Number(),转换成数字值,再执行前置++ – 后置++ --(不同的是前置是完成转换后先+±-再参与其他运算或输出。而后置是转换完成后先参与其它运算或输出,然后再+±-)。
    如果数据类型是对象,那么先调用它的valueOf()或toString()方法(具体用那种转换方式?一般情况会默认调用valueOf(),没有valueOf()或得到的不是原始值则调用toString()),然后再执行Number(),最后再执行前置++ – 后置++ --。
    ❾暂时就想到这么多,如果有什么遗漏或者有什么错误的地方,欢迎大家批评指正。

    展开全文
  • JS隐式转换 隐式转换的含义 js中运算符两边数据类型不统一,js会对其自动转换,这种转换方式编译器会自己完成,不需要程序员手动操作。 ++,–,+,-,*,/,%,>,<,>=,<=,,!=,=,!==等运算符会将...

    JS隐式转换

    • 隐式转换的含义
      js中运算符两边数据类型不统一,js会对其自动转换,这种转换方式编译器会自己完成,不需要程序员手动操作。

    • ++,–,+,-,*,/,%,>,<,>=,<=,,!=,=,!==等运算符会将参数转化为number

    • if中的表达式逻辑运算(如合取,析取,非,同或)会把参数转化为boolean

    可使用typeof()函数获取一个数据的类型,

    值得注意的是在无法转换为number型的情况下,JavaScript会将其转换为NaN。

    例:

    //0
    ''->0
    false->0
    []->0
    //1
    '1'->1
    [1]->1
    true->1
    /*[]在字符串连接符+中表示空字符串
    在逻辑中转换为true
    */

    undefined==null
    true
    null==1
    false
    null==0
    false
    undefined==1
    false
    undefined==0
    false
    [1]==1
    true
    var a={1:1}
    undefined
    a==1
    false

    总结

    除0外的实数,其布尔值为true;除""以的字符,其布尔值为true;注意特殊的参数NaN,无穷大等。

    展开全文
  • 目录 1.1 隐式转换介绍 1.2 隐式转换规则 1.3 坑一:字符串连接符与算术运算符隐式转换规则混淆 1.4 坑二:关系运算符:会把其他数据类型转换成number之后再...在js中,当运算符在运算时,如果两边数据不统一,CP...

    目录

    1.1 隐式转换介绍

    1.2 隐式转换规则

    1.3 坑一:字符串连接符与算术运算符隐式转换规则混淆

    1.4 坑二:关系运算符:会把其他数据类型转换成number之后再比较关系

    1.5 坑三:复杂数据类型在隐式转换时会先转成String,然后再转成Number运算

    1.6-坑四:逻辑非隐式转换与关系运算符隐式转换搞混淆

    1.1-隐式转换介绍

    在js中,当运算符在运算时,如果两边数据不统一,CPU就无法计算,这时我们编译器会自动将运算符两边的数据做一个数据类型转换,转成一样的数据类型再计算,这种无需程序员手动转换,而由编译器自动转换的方式就称为隐式转换

    1.2-隐式转换规则

    1. 对象和布尔值比较
      对象和布尔值进行比较时,对象先转换为字符串,然后再转换为数字,布尔值直接转换为数字
      [] == true; //false []转换为字符串’’,然后转换为数字0,true转换为数字1,所以为false

    2. 对象和字符串比较
      对象和字符串进行比较时,对象转换为字符串,然后两者进行比较。
      [1,2,3] == ‘1,2,3’ // true [1,2,3]转化为’1,2,3’,然后和’1,2,3’, so结果为true;

    3. 对象和数字比较
      对象和数字进行比较时,对象先转换为字符串,然后转换为数字,再和数字进行比较。
      [1] == 1; // true `对象先转换为字符串再转换为数字,二者再比较 [1] => ‘1’ => 1 所以结果为true

    4. 字符串和数字比较
      字符串和数字进行比较时,字符串转换成数字,二者再比较。
      ‘1’ == 1 // true

    5. 字符串和布尔值比较
      字符串和布尔值进行比较时,二者全部转换成数值再比较。
      ‘1’ == true; // true

    6. 布尔值和数字比较
      布尔值和数字进行比较时,布尔转换为数字,二者比较。
      true == 1 // true

    在这里插入图片描述
    任意两种类型比较时,如果不是同一个类型比较的话,则按如图方式进行相应类型转换。
    对象 => 字符串 => 数值
    布尔值 => 数值。

    特别注意:
    1.空字符串(’’),NaN,0,null,undefined这几个外返回的都是true
    2.undefined == null //true undefined和null 比较返回true,二者和其他值比较返回false
    3.Number(null) //0

    1.3-坑一:字符串连接符与算术运算符隐式转换规则混淆

    · 常见面试题如下

    在这里插入图片描述

    · 原理分析
    在这里插入图片描述

    1.4-坑二:关系运算符:会把其他数据类型转换成number之后再比较关系

    常见面试题如下
    在这里插入图片描述

    · 原理分析
    在这里插入图片描述

    1.5-坑三:复杂数据类型在隐式转换时会先转成String,然后再转成Number运算

    · 原理分析
    在这里插入图片描述

    · 原理分析
    在这里插入图片描述

    1.6-坑四:逻辑非隐式转换 与 关系运算符隐式转换 搞混淆

    · 前方高能,请注意~
    o 空数组的toString()方法会得到空字符串,而空对象的toString()方法会得到字符串[object Object] (注意第一个小写o,第二个大写O哟)

    · 常见面试题
    在这里插入图片描述
    · 原理分析

    在这里插入图片描述


    作者:传智播客官方博客
    来源:CSDN
    原文:https://blog.csdn.net/itcast_cn/article/details/82887895
    版权声明:本文为博主原创文章,转载请附上博文链接!

    展开全文
  • JavaScript的数据类型分为六种,分别为null,...不同类型的变量比较要先转类型,叫做类型转换,类型转换也叫隐式转换隐式转换通常发生在运算符加减乘除,等于,还有小于,大于等。。基本类型的转换字符串加数字...

    JavaScript的数据类型分为六种,分别为null,undefined,boolean,string,number,object。object是引用类型,其它的五种是基本类型或者是原始类型。我们可以用typeof方法打印来某个是属于哪个类型的。不同类型的变量比较要先转类型,叫做类型转换,类型转换也叫隐式转换。隐式转换通常发生在运算符加减乘除,等于,还有小于,大于等。。

    基本类型的转换字符串加数字,数字就会转成字符串。

    数字减字符串,字符串转成数字。如果字符串不是纯数字就会转成NaN。字符串减数字也一样。两个字符串相减也先转成数字。

    乘,除,大于,小于跟减的转换也是一样

    //隐式转换 + - * == /

    // +

    10 + '20' //'2010'

    // -

    10 - '20' //-10

    10 - 'one' //NaN

    10 - '100a' //NaN

    // *

    10*'20' //200

    '10'*'20' //200

    // /

    20/'10' //2

    '20'/'10' //2

    '20'/'one'  //NaN

    再来看看一组 == 的。undefined等于null

    字符串和数字比较时,字符串转数字

    数字为布尔比较时,布尔转数字

    字符串和布尔比较时,两者转数字

    // ==

    undefined == null; //true

    '0' == 0;    //true,字符串转数字

    0 == false; //true,布尔转数字

    '0' == false;    //true,两者转数字

    null == false;   //false

    undefined == false;  //false

    引用类型的转换

    基本类型间的比较相对简单。引用类型和基本类型的比较就相对复杂一些,先要把引用类型转成基本类型,再按上述的方法比较。引用类型转布尔全是true。比如空数组,只要是对象就是引用类型,所以[]为true。引用类型转数字或者字符串就要用valueOf()或者toString();对象本身就继承了valuOf()和toString(),还可以自定义valueOf()和toString()。根据不同的对象用继承的valueOf()转成字符串,数字或本身,而对象用toString就一定转为字符串。一般对象默认调用valueOf()。对象转数字时,调用valueOf();

    对象转字符串时,调用toString();

    自定义的valueOf()和toString();自定义的valueOf()和toString()都存在,会默认调用valueOf();

    如果只有toString(),则调用toString();

    显式转换

    显式转换比较简单,可以直接用类当作方法直接转换。

    Number([]); //0

    String([]); //''

    Boolean([]); //true

    还有更简单的转换方法。

    3 + '' // 字符串'3'

    +'3' // 数字3

    !!'3' // true

    展开全文
  • 作者:原罪来源:SegmentFault 思否社区不管是在技术...Type说到底还是JS类型转换的问题,首先我们先温习一下JS的7种内置类型:NumberStringBooleanNullUndefinedObjectSymbol是不是感觉还有Function,毕竟能用ty...
  • js的typeof返回的是字符串一共有 “number”, “string”, “boolean”, “object”, “undefined” “function”其实function也是object,为什么这么返回我也不知道在进行( + - * / % )运算时基本类型的转换形式先...
  • Javascript隐式转换

    2018-03-30 09:00:39
    Javascript隐式转换
  • 复杂数据类型([],{})在隐式转换时会先转成String,然后再转成Number运算 基本类型隐式转换无特殊 0、-0、NaN、’’、null、undefined、document.all在Boolean转换为false值,其余任何值都会被转换为true 1、转...
  • JavaScript隐式转换

    2021-06-04 20:48:03
    JavaScript隐式转换一、 JavaScript 数据类型二、 JavaScript 隐式转换1. 隐式转换规则1. + 运算符2. == 运算符3. >运算符4.复杂数据类型 一、 JavaScript 数据类型 js中有7种数据类型,可以分为两类:原始类型...
  • JS中隐式类型转换JS中的数据类型JS中的数据类型分为两大类:1.基本数据类型:1.String 字符串表示一段文本,例如:人的姓名、地址等2.Number 数值3.Boolean 布尔值4.Null 空值表示“没有对象”,即:此处不应该有值5...
  • js中隐式转换

    2019-12-11 17:02:10
    后来查阅资料是因为js中隐式转换的问题; js原始类型包含:string、number、boolean、null、undefined、symbol JS的对象类型包含:object 隐式转换概念: 1.undefined与null相等,但不恒等(===) 2.一个...
  • JavaScript中隐式转换

    2019-07-29 13:10:36
    隐式转换 “+” 运算的隐式转换 如: (1) var a=“123”; a=+a; console.log(typeof a); 输出结果:number (2) var a=“123”; a=a+0; console.log(typeof a); 输出结果:number “-”运算的隐式转换 如: (1). ...
  • JavaScript 隐式转换

    2017-10-12 20:23:27
    JavaScript 隐式转换
  • JS隐式转换

    2021-06-17 13:29:15
    一、NaN,0,undefined,null,“”隐式转换为false; 二、如何yin'shi'zhuan'huan'cheng
  • js隐式转换

    2020-07-07 09:56:26
    js隐式转换 js基础数据类型:string、number、boolean、null、undefined、symbol 当运算符在运算时,如果运算符两边的数据类型不一致,那么CPU就无法进行计算。js的编辑器会自动将运算符两边的数据转换为同一类型,...
  •   在js中,当运算符在运算时,如果 两边数据不统一,CPU就无法计算,这时我们编译器会自动将运算符两边的数据做一个数据类型转换,转成一样的数据类型再计算 这种无需程序员手动转换,而由编译器自动转换的方式就...
  • 谈谈JS中隐式转换

    千次阅读 2019-04-26 17:07:06
    在进行比较运算,或者进行四则运算时,常常会触发JS中隐式转换机制。 首先要记住JS设计者的初衷是美好的,他希望 == 是美好的操作选择,但是在美好的希望也是希望。 小案例 为什么 [] == false ? 类型不同比较...
  • JS运算符中隐式转换的规律: 一、递增递减运算符 1.如果包含的是有效数字字符串或者是有效浮点数字符串,则会将字符串转换(Number())为数值,再进行加减操作,返回值的类型是:number类型 var num1 = “1” var num2...
  • JS 类型隐式转换

    2020-10-09 17:47:15
    2、三种隐式转换类型 js中一个难点就是js隐形转换,因为js在一些操作符下其类型会做一些变化,所以js灵活,同时造成易出错,并且难以理解。 涉及隐式转换最多的两个运算符 + 和 ==。 +运算符即可数字相加,也可以...
  • JavaScript简单隐式转换

    2019-08-01 13:55:12
    今天在帮后台写一个页面的时候,发现了一个问题,...其实JavaScript的显式转换和隐式转换概念是一样的,都是对数据类型进行转换,显式的话是我们直接调用方法转换,比如直接:parseInt(),隐式转换则是内部进行转换...
  • js中数据的隐式转换

    2017-08-23 08:22:17
    JavaScript属于弱类型的语言,数据类型转换有两种:隐式转换和显示转换。 隐式转换:程序在运行时进行的自动转换就叫隐式转换。1、“+”的隐式转换 例子:var num1=1,num2=2; var str="js"; var b1=true,b2=false;...
  • js隐式转换

    2021-10-17 19:59:58
    在+ - * / 运算符里面: +拼接 字符串的话, 数字类型会...- * / 这些符号的 字符串和数字拼接的话 就会把字符串隐式转换为数字进行计算; 所以只有第一个是 返回的字符串类型, 其余的三种运算都是返回的数字类型; ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 35,703
精华内容 14,281
关键字:

js中的隐式转换