隐式类型转换

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

如果比较的两者中有布尔值Boolean,会把 Boolean 先转换为对应的 Number,即 0 和 1,然后进行比较。

如果比较的双方中有一方为 Number ,一方为 String 时,会把 String 通过 Number() 方法转换为数字,然后进行比较。

如果比较的双方中有一方为 Boolean ,一方为 String 时,则会将空字符串 ""转换为 false ,除此外的一切字符串转换为 true ,然后进行比较。

如果比较的双方中有一方为 Number ,一方为 Object 时,则会调用 valueOf 方法将 Object 转换为数字,然后进行比较。

+:当一个字符串和一个数字相加的时候,会把数字转换成字符串

-:当一个字符串和一个数字相减的时候,会把字符串转换成数字

时间: 2024-11-04 07:36:32

隐式类型转换的相关文章

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

More Effective C++ 条款21 利用重载技术避免隐式类型转换

1. 正如条款19和条款20所言,临时对象的构造和析构会增加程序的运行成本,因此有必要采取措施尽量避免临时对象的产生.条款20介绍了一种用于消除函数返回对象而产生临时对象的方法——RVO,但它并不能解决隐式类型转换所产生的临时对象成本问题.在某些情况下,可以考虑利用重载技术避免隐式类型转换. 2. 考虑以下类UPInt类用于处理高精度整数: class UPInt{ public: UPInt(); UPInt(int value); ... }; const UPInt operator+(c

C++的隐式类型转换

C++是一种复杂的语言,其中有许多“好玩”的特性,学习C++的过程就像在海边捡一颗颗石头,只要坚持不懈,也许一颗颗小石头也能建起你自己小小的城堡. 废话完后,讲讲自己捡到的石头:隐式类型转换 学习出处:<Effective C++> lostmouse大人翻译 class TestInt{ public:    int GetData()const{ return i;};    TestInt(int ii):i(ii){}; //构造函数 private:    int i; }; voi

为何要防止隐式类型转换

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

scala学习手记35 - 隐式类型转换

先来看一下下面的内容: 2 days "ago" 5 days "from_now" 如上的内容具体应该是什么呢?不过怎么看也不像是代码.不过既然是在学代码,拿不是代码的东西出来做什么! 非要强说是代码的话,那么执行起来肯定是要报错的--因为scala的Int和RichInt,以及Integer中都没有days这样的方法: 如果说不是代码的话,那么scala中的to或until本来看起来也不像代码: 2 to 6 2 until 7 现在剩下的就是怎么为整型值添加上

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隐式类型转换

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

「译」JavaScript 的怪癖 1:隐式类型转换

原文:JavaScript quirk 1: implicit conversion of values 译文:「译」JavaScript 的怪癖 1:隐式类型转换 译者:justjavac 零:提要 [此贴子是 javascript 的 12 个怪癖(quirks) 系列的第一篇.] JavaScript 是非常宽容的,「来者不拒」,不在乎什么类型. 例如,它如果想要接受数字,它并不拒绝其他类型的值,而是试图把它们转换成数字: > '5' - '2' 3 > '5' * '2' 10 自动转

Shell、Awk 中自动隐式类型转换的“坑”

1.问题: 在林林总总的编程语言里,弱类型的语言着实不少,一方面这种"动态类型"用起来很方便,而另一方面则"坑"你没商量~ 常见的 SQL.Shell.Awk 都会遇到各种暗藏的"隐式类型转换",下面就列举一些 shell.awk 里的自动隐式类型转换 case,防止掉坑. 注意 shell.awk 的变量为空 字符串.变量为空 未定义.初始值的隐式转换问题: # shell 下的字典排序比较 [email protected] 10:59:23

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):