Javascript中需要注意的3个操作符
我习惯了写C#,所以觉得什么样的操作符就应该做什么样的操作,但是有一天你的习惯被其他语言颠覆了。我想知道是否有强烈的好奇心
心,只是在js,我的习惯被颠覆了。看看是哪些运营商颠覆了我的三观。
一:==运算符
==运算符能够被颠覆的原因可以从下面的例子中看出。
1 '10'==10 ?
如果这放在C#里,编译器会粗暴地告诉你,你的类型不一样,所以你比羊毛强。但是JS会发生什么呢?
从上图可以看出,不管你是否好奇,答案都在那里。有人可能会问,是10转化为“10”还是“10”转化为10,所以这也是
那是我经常吐痰的地方。如果是C#,也可以在IL中看到如何处理,但是在JS中看不到任何东西。你只能听教科书的一面,但你不能相信你所看到的。
所以,除了记住,我只能说把字符串“10”转换成10,然后通过整形来比较。
2true==1?
这个问题稍微考虑一下就可以理解了。其实在C#的IL中,真和假也转换成1和0,所以js在判断的时候会把真转换成1,然后进行整形比较,这
我不觉得这种现象很不寻常,只要记住就好。
3 { valueof : function(){ return ' 10 ' }==10?
这个问题也挺精彩的。一个对象可以和int类型比较吗?但是真的可以用JS来做。原理是如果一个对象与int/string进行比较,
在js中将首先调用valueOf方法,也就是说,对象将被数字化。事实上,这里有趣的是我们的自定义valueOf重写了父类的valueOf方法,
例子是判断“10”==10?
这里需要PS。如果您的类中没有定义valueOf方法,js内部引擎将再次查找toString()方法,如果有,则执行它。
不知道你接触到这些新用法的时候有没有一点心慌,好像有一种乱七八糟的感觉。如果你害怕程序中潜在的错误,那么为了安全起见,
转换为相同的数据类型进行比较。当然js中还有一个===运算符,可以说是最接近C#中的逻辑运算符。这个多余的“=”在
在“==”的基础上,判断类型是否相等?比如:
二:and | |运算符
这两个运营商也很棒。在我们的思维习惯中,这两个运算符的两边都应该是bool类型,但是在JS中这些定义会被完全推翻。正是这些新规则,所以我们可以完成许多新的把戏。例如,在jquery的源代码中,我们可以到处找到这样的痕迹。
从图中我们可以看到这样一句话,bup=b b.parentNode,你能理解这句话的意思吗?其实就是先判断B是否存在。如果乙不存在,那么
也许b是未定义的,null,0或NaN。如果b存在,它将返回m.parentNode,这太有趣了。如果用C#的话,会有几个if条件。
也可以看作是简化代码,再看| |操作。这可以被描述为源代码中的泛洪,但乍一看,它特别像C#中的可空运算符,因此亲密度加倍
增加,我们取ret=results||[],如果results有值,那么ret=results,如果results为null,undefined,NaN或者0,那么result=[],那么
这种任性节省了程序员很多if判断。最后,我们应该补充一点,就像C#中的IL一样,只有JS的底层给了我们if判断。
版权声明:Javascript中需要注意的3个操作符是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。