js条件判断时隐式类型转换

Javascript 中,数字 0 为假,非0 均为真

在条件判断运算 == 中的转换规则是这样的:

  1. 如果比较的两者中有布尔值(Boolean),会把 Boolean 先转换为对应的 Number,即 0 和 1,然后进行比较。
  2. 如果比较的双方中有一方为 Number,一方为 String时,会把 String 通过 Number() 方法转换为数字,然后进行比较。
  3. 如果比较的双方中有一方为 Boolean,一方为 String时,则会将空字符串""转换为 false,除此外的一切字符串转换为 true,然后进行比较。
  4. 如果比较的双方中有一方为 Number,一方为Object时,则会调用 valueOf 方法将Object转换为数字,然后进行比较。

隐式类型转换会给我们造成很多麻烦,那么该怎么避免呢?

建议在所有使用条件判断的时候都使用全等运算符 === 来进行条件判断。全等运算符会先进行数据类型判断,并且不会发生隐式类型转换。

时间: 2024-08-06 10:14:04

js条件判断时隐式类型转换的相关文章

JS 基础1: 理解number 数据类型 和隐式类型转换

1, Javascript only has one type of numberic data, named "number". You can see this reflected in the behavior of the typeof operator, which classifies intergers and floating-point numbers alike simply as numbers: typeof 10; // "number"

Javascript显示和隐式类型转换

1.转换成字符串 多数的JavaScript宿主环境(比如Node.js和Chrome)都提供了全局函数toString: 与此同时Object.prototype也定义了toString方法,使得所有对象都拥有转换为字符串的能力. 比如一个Number转换为String: var n = 1; n.toString(); // '1' toString接受一个参数指定进制,默认为10. 可以利用这个参数生成包括字母和数字的随机字符串: Math.random().toString(36).su

JavaScript隐式类型转换

编程中少不了将某个数据类型转换成另一种数据类型.其中通过函数或者方法调用以及强制转换称为显示转换,相反的,在"不知情"的情况下"有意"的进行的转换,则称为隐士转换. 运算符中的隐士类型转换 比较常见隐士类型转换,很多语言中都存在的.这里仅仅说说JavaScript中存在的. 1."+"运算符 function add(){ var a ='2'; var b =2; var c = a + b; console.info(c); //输出22 c

有趣的JavaScript隐式类型转换

JavaScript的数据类型是非常弱的(不然不会叫它做弱类型语言了)!在使用算术运算符时,运算符两边的数据类型可以是任意的,比如,一个字符串可以和数字相加.之所以不同的数据类型之间可以做运算,是因为JavaScript引擎在运算之前会悄悄的把他们进行了隐式类型转换的,如下是数值类型和布尔类型的相加: 3 + true; // 4 结果是一个数值型!如果是在C或者Java环境的话,上面的运算肯定会因为运算符两边的数据类型不一致而导致报错的!但是,在JavaScript中,只有少数情况下,错误类型

c++ operator操作符的两种用法:重载和隐式类型转换,string转其他基本数据类型的简洁实现string_cast

C++中的operator主要有两个作用,一是操作符的重载,一是自定义对象类型的隐式转换.对于操作符的重载,许多人都不陌生,但是估计不少人都不太熟悉operator的第二种用法,即自定义对象类型的隐式转换,我们下面就用以下这个小例子温故一下这两种用法: 1 #include <iostream> 2 #include <sstream> 3 using namespace std; 4 5 class FuncObj 6 { 7 public: 8 FuncObj(int n):

javascript教程隐式类型转换如何操作

在学习javascript(http://www.maiziedu.com/course/web/229-1988/)中,我们都发现JavaScript的数据类型是非常弱的!在使用算术运算符时,运算符两边的数据类型可以是任意的,比如,一个字符串可以和数字相加.之所以不同的数据类型之间可以做运算,是因为JavaScript引擎在运算之前会悄悄的把他们进行了隐式类型转换的,如下是数值类型和布尔类型的相加:3 + true; // 4结果是一个数值型!如果是在C或者Java环境的话,上面的运算肯定会因

c++隐式类型转换和explicit

什么是隐式转换? 众所周知,C++的基本类型中并非完全的对立,部分数据类型之间是可以进行隐式转换的. 所谓隐式转换,是指不需要用户干预,编译器私下进行的类型转换行为.很多时候用户可能都不知道进行了哪些转换. 为什么要进行隐式转换? C++面向对象的多态特性,就是通过父类的类型实现对子类的封装. 通过隐式转换,你可以直接将一个子类的对象使用父类的类型进行返回. 在比如,数值和布尔类型的转换,整数和浮点数的转换等. 某些方面来说,隐式转换给C++程序开发者带来了不小的便捷. C++是一门强类型语言,

OpenCV中operator的隐式类型转换

c++ operator操作符的两种用法 重载和隐式类型转换 今天学习OpenCV源码的时候碰到这种写法: template<typename _Tp> operator std::vector<_Tp>() const; template<typename _Tp, int n> operator Vec<_Tp, n>() const; template<typename _Tp, int m, int n> operator Matx<

为何要防止隐式类型转换

让编译器进行隐式类型转换所造成的弊端要大于它所带来的好处,所以除非你确实需要,不要定义类型转换函数. 隐式类型转换的缺点:它们的存在将导致错误的发生.例如:class Rational {public:  ...  operator double() const;                   // 转换Rational类成double类型};在下面这种情况下,这个函数会被自动调用:Rational r(1, 2);                            // r 的值是1