zoukankan      html  css  js  c++  java
  • 前端学习之----隐式类型转换

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

    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:如有错误,请大家指正,我会虚心更正,大家共同进步)

  • 相关阅读:
    2、ansilbe常用模块详解及inventory介绍
    1、Ansible简介及简单安装、使用
    dhcp、tftp及pxe简介
    php-fpm常见错误
    php之编译安装
    nginx之常见错误
    ssh之秘钥登陆
    MySQL之主从复制
    Python之虚拟环境
    php调试工具之firePHP
  • 原文地址:https://www.cnblogs.com/zhaoyingzhen/p/8233539.html
Copyright © 2011-2022 走看看