• 前端学习之----隐式类型转换


    一、类型转换的各种情况:

    1、遇到运算符+、-、*、/的时候:

      当遇到-、*、/的时候,会将运算符前后都转换为number类型;

      当遇到+的时候,会将运算符前后转换为字符串类型,即字符串拼接。

    在实际编程中,想要将一个字符串变成数字,可以将其减去0;

    若想要将数字变成字符串,可以将其加上空字符串。

    2、遇到逻辑运算&&、||、!的时候:

    逻辑运算符前后的表达式会被转换为truefalse。

      如果是number类型,0为false,其他都为true;

      如果是string类型,空字符串为false,其他都为true;

      null和undefined都转换为false。

    上面!window.x为true是因为:window.x未定义,即undefined,所以非了之后,就为true。

    3、判断语句中:

    会试图将表达式转换为true或false。

      如果是number类型,0为false,其他都为true;

      如果是string类型,空字符串为false,其他都为true。

    4、最后一种情况就是在进行等于运算“==”的时候会有类型转换:(第二部分会详细说明=、==、===的区别)

    二、“=”、“==”和“===”:

    “=”就是把它右边的值赋给左边的变量;(这个每个人都知道,但是将其列出来就是为了使脑子清晰)

    “==”是相等操作符,对应的是不相等操作符:“!=”。相等和不相等操作符的特点就是:先转换,再比较。

    规则如下:

    1、先看字符串,数值和布尔值这三种排列组合的情况:

      如果两边都是同一种类型,就看是不是一样;

      如果有一边的操作数是布尔值,则将true转换为1,false转换为0:

      如果有一边的操作符是字符串,则用Number()方法将字符串转换为数值,再比较:

     

    由上面的实验可以得到:空字符串会转为0,不代表非空字符串会转为1。(避免惯性思维)

    2、再来看特殊的undefinednullNaN

      null和undefined是相等的,而且不管是它俩之间相互比较还是它们中任何一个和别的比较,它俩都不会转换为其它任何值

      NaN和任何值都不相等,包括它本身:

    3、最后来看操作数为对象的情况:

      一个操作数是对象,另一个不是对象时:调用对象的valueOf()方法得到对象的基本类型值,再进行比较:

     

      如果两个操作数都是对象,则看它们是否指向同一个对象,是为true,否为false。

    “===”“!==”称为全等和不全等:这两个操作符在比较时不进行类型转换

      如果两个操作数在未经类型转换的情况下就相等,则返回true,其余都返回false。

      需要注意的是null和undefined是不全等的,因为它们是不同类型的值:

    实际应用中,==和===怎么选择:

     if语句和双否定【!!】

    在判断语句中,除了用null,还能用双否定

     注意:空数组或者对象也为------“是”

    所以,

    判断数组是否为空,需要用Arr.length是否为0

    判断对象是否为空,需要用Object.keys(obj).length是否为0

    (ps:如有错误,请大家指正,我会虚心更正,大家共同进步)

  • 相关阅读:
    HDU 5059 Help him
    HDU 5058 So easy
    HDU 5056 Boring count
    HDU 5055 Bob and math problem
    HDU 5054 Alice and Bob
    HDU 5019 Revenge of GCD
    HDU 5018 Revenge of Fibonacci
    HDU 1556 Color the ball
    CodeForces 702D Road to Post Office
    CodeForces 702C Cellular Network
  • 原文地址:https://www.cnblogs.com/zhaoyingzhen/p/8233539.html
Copyright © 2020-2023  润新知