tostring

js 如何使 (aᅠ==1 && a== 2 && a==3) 返回 true?

穿精又带淫゛_ 提交于 2020-03-02 16:19:01
今天刷博客的时候,看到了一道有趣的面试题“如何使 (aᅠ==1 && a== 2 && a==3) 返回 true”,咋一眼看过去,觉得非常的unbelievable!!! 看了别人给的答案之后,陷入了沉思。。。然后感叹一声:原来如此! 我们来看看大神们的脑洞吧~ 解法一:对象类型转换 var a = { i: 1, toString: function () { return a.i++; } } if(a == 1 && a == 2 && a == 3) { console.log('It is amazing!'); } 试试在控制台试一下,你或许同样会感到 amazing。 这里面是利用的js的类型转换规则,当两个类型不同时进行==比较时,会将一个类型转为另一个类型,然后再进行比较。 · 比如 Object 类型与 Number 类型进行比较时,Object 类型会转换为 Number 类型。转换为时会尝试调用 Object.valueOf 和 Object.toString 来获取对应的数字基本类型。 上面的转换逻辑是先调用 valueOf 方法,如果返回的还是对象,再接着调用 toString 方法。每次比较时候都会执行方法返回 a 的 i 属性同时也改变 i 的值,所以上面 if 执行完以后 a 的 i 属性已经变为了 4。 上面的解法是重写了对象 a 的

javascript对象类型转换

非 Y 不嫁゛ 提交于 2020-03-02 10:50:47
Object类型 除基本数据类型之外的所有类型都为Object类型。 toString方法 toString方法一般返回一个反映这个对象的字符串 //一般对象 var obj = {name:'jack',age:18}; console.log(typeof obj.toString(),obj.toString()); //数组 var arr = ['zero','one','two']; console.log(typeof arr.toString(),arr.toString()); //函数 var fun = function(a,b){ return a+b; }; console.log(typeof fun.toString(),fun.toString()); //正则表达式 var reg = /\s+/; console.log(typeof reg.toString(),reg.toString()); //日期 var d = new Date(); console.log(typeof d.toString(),d.toString()); 测试结果 valueOf方法 一般默认返回对象本身,Date类重写了valueOf方法,其返回1970年1月1日以来的毫秒数 var obj = {name:'jack',age:18}; console

对象的valueOf和toString

。_饼干妹妹 提交于 2020-03-02 09:51:40
var a = { valueOf : function () { return 10; }, toString: function () { return 'this is tostring'; } } //print this object a console.log(a) //20 console.log(a+10); //this is tostrig10 delete a.valueOf; console.log(a+10); 来源: oschina 链接: https://my.oschina.net/u/2285087/blog/3184907

function的toString方法

橙三吉。 提交于 2020-02-29 02:51:18
javascript的创建多行字符串的除了平时常见的 ”“+ 反斜杠 \ 还有ES6的 ` ` 在 js51 上发现一个很有意思的方法 function heredoc(fn) { return fn.toString().split('\n').slice(1,-1).join('\n') + '\n' } var tmpl = heredoc(function(){/* !!! 5 html include header body //if IE 6 .alert.alert-error center 对不起,我们不支持IE6,请升级你的浏览器 a(href="http://windows.microsoft.com/zh-CN/internet-explorer/download-ie") | IE8官方下载 a(href="https://www.google.com/intl/en/chrome/browser/") | Chrome下载 include head .container .row-fluid .span8 block main include pagerbar .span4 include sidebar include footer include script */}); 优点: 模板字符串内不必写多余的任何字符,干净,简单 真正意义上的多行字符串,

如何重写object虚方法

心不动则不痛 提交于 2020-02-28 11:14:02
在 C# 中 Object 是所有类的基类,所有的结构和类都直接或间接的派生自它。前面这段话可以说所有的 C# 开发人员都知道,但是我相信其中有一部分程序员并不清楚甚至不知道我们常用的 ToString 、 Equals 和 GetHashCode 虚方法都来自于 Object 类,并且我们可以对它们进行重写。重写这三个虚方法可以说在项目开发中经常用到,只不过大部分开发人员并未留意这三个虚方法可以重写,而是自己写方法来实现。 下面我就来具体讲解一下它们三个应该怎么重写。在这里我需要说明的是本篇文章会大量涉及到设计规范和设计要求,代码只是作为辅助理解的形式出现,因此文章中的所有代码将会以代码段的形式出现。 零、 ToString ToString 重写是这三种方法中重写最简单的,也是最常用的。但是有一部分开发人员认为重写 ToString 方法意义不大,那么我在这里要说的是这种想法是错误的。当我们在对象上调用 ToString 时默认返回的是类的完全限定名称,比如说我们在 System.IO.File 对象上调用这个方法,就会返回字符串 System.IO.File ,这个结果往往并不是我们所需要的结果并且这个结果也没有什么意义。例如我们在一个 User 类中重写 ToString 方法,每次调用 User.ToString() 时返回 "XXX今年XX岁",如果我们不重写

Java基础 学习笔记4

ぐ巨炮叔叔 提交于 2020-02-27 18:42:45
1.继承 继承是类与类的一种关系;Java中的继承是单继承,只有一个父类。 继承的好处:子类直接拥有父亲的所有属性和方法(private修饰的无效!),可实现代码复用。 语法规则: class 子类 extends 父类 eg:class Dog extends Animal{ … } 2.Java中的方法重写 如果子类对继承父类的方法不满意,是可以重写父类继承的方法的,当调用方法时会优先调用子类的方法。 语法规则:返回值类型,方法名,参数类型及个数都要与父类继承的方法相同,才叫方法的重写。 3.Java中的继承初始化顺序 a.初始化父类再初始化子类。(使用构造方法可以看出,虽然仅创建了子类的对象,但是先执行了父类的构造方法,之后才执行子类的构造方法)。 b.先执行初始化对象中的属性,再执行构造方法中的初始化。 4.Java中final的使用 final关键字: 表示“最终的”,即不可修改。 final可以修饰类、方法、属性和变量 a.修饰类:该类不允许被继承 b.修饰方法:该方法不允许被重写 c.修饰属性:则该属性不会进行隐式初始化(不会自动初始化,之前我们没有初始化都是系统帮我们自动初始化),需要手动初始化或者在构造方法中初始化 (但二者只能选一,即只能初始化一次后便不能更改) d.修饰变量,只能在声明的时候赋一次值,成为常量(static final 会使其成为全局常量)。

关于null == 0该如何运用?

对着背影说爱祢 提交于 2020-02-26 01:55:33
单纯从这个题目本身来看,没有什么东西,而且这个问题的答案我们通过浏览器就能得到印证。我们今天要说的不是这个问题,而是对于 == 到底是如何运算的? 首先我们来解决这个问题 null == 0 ? 结果是什么呢?我们先通过浏览器来验证一下。 在这里我们得到的答案,false,是不是今天的文章就结束了呢,显然没有。我们深入的来探究一下,为什么是这样的结果呢。 接下来我们来探究一下,为什么是这样的一个过程! 为了证明一下说明的内容是浏览器 JS 引擎的设置规则,而非个人认为,下面引用 W3C 的制定规范。 以下内容来自 W3C 标准 11.9.3 抽象相等比较法。 比较运算 x==y, 其中 x 和 y 是值,产生 true 或者 false。这样的比较按如下方式进行: 若 Type(x)与 Type(y)相同,则 若 Type(x)为 Undefined, 返回 true。 若 Type(x)为 Null, 返回 true。 若 Type(x)为 Number, 则 若 x 为 NaN, 返回 false。 若 y 为 NaN, 返回 false。 若 x 与 y 为相等数值, 返回 true。 若 x 为 +0 且 y 为−0, 返回 true。 若 x 为 −0 且 y 为+0, 返回 true。 返回 false。 若 Type(x)为 String, 则当 x 和 y

(隐式) 类型转换

早过忘川 提交于 2020-02-25 15:24:44
(隐式) 类型转换 一。 1,假如比较的是字符串:按位比较。字符编码:ASCII 码 A:65 a:97 ​ 数字<大写字母<小写字母 "98" > "A" //false 按位进行比较,9<A(65) 2.js是一个基于原形的动态类型的弱类型的脚本语言。 ​ 弱类型:声明变量的时候不需要给定数据类型,代码执行的时候灵活的改变类型。 ​ 动态类型:类型之间没有严格的隔离的,使用不同的类型进行计算:最终结果一定是6大类型之一。在运算过程中进行转换:A数据类型 =》B数据类型。如:123 =》“123”。 二.隐式类型转换。只是基本数据类型(数值,字符串,布尔,null,undefined,)和复杂数据类型(对象) 本质上不会改变原来的变量的值,只是在运算的时候,悄悄地转成能够计算的值。所以叫隐式类型转换 let a = 1 console . log ( a + "1" ) //11 console . log ( a ) //1 1.转字符串:数据类型转换的桥梁(如果直接转别的类型不可以,则可以通过先转成字符串,再转对应类型)。 (1)数值类型转字符串。加法运算符中如果有字符串参与到加法中,会将数值转为字符串。 1 + "" //"1" 1 / 0 // Infinity 1 / - 0 //-Infinity - 0 + "" // "0" 0分为0和-0

有关于ValueOf( )和toString( )

别来无恙 提交于 2020-02-24 04:16:02
高手们对这个两个方法的解析也是非常深入地,为了提醒善忘的自己,我也记录一下看到的东西。 按照惯例先看例子,就随便用一个网上的例子吧。(希望简单的例子能让大家看得明白) <script type="text/javascript"> var x={ valueOf:function(){ return 123; }, toString:function(){ return 'Ryan'; } } alert(x);//Ryan alert(+x);//123 alert(x+'abc');//123abc </script> 二者并存的情况下,在数值运算中,优先调用了valueOf,字符串运算中,优先调用了toString。 后续将会完善这篇文章,它只写了一点。 来源: https://www.cnblogs.com/coolicer/archive/2010/10/06/1844600.html