javascript 易错运算符

https://juejin.im/post/5a91615f6fb9a0634d27c770
‘+’ 运算符
调用 ToPrimitive(),除了Object类型返回该对象的默认值(调用对象的内部方法 [[DefaultVlaue]] 见8.12.8),其余都返回输入的参数。先调用valueOf() ‘+’ 运算符只能作用于原始值

1 + '1' = '11';
1 - '1' = 0;
'2' + '2' -'2' = 20;
[] + [] = ''; // [].valueOf() = []; [].toString() = '';
[] - [] = 0;
{} + {} = '[object Object][object Object]'; //({}).toString()= [object Object];({}).valueOf()={};
// 注意后面的那个O大写。 FF和Edge浏览器输出 NAN (它们会认为以花括号开头({)的,是一个区块语句的开头,而不是一个对象字面量,所以会认为略过第一个{},把整个语句认为是个+{}的语句) Chrome devtools 在执行代码的时候隐式的给表达式添加了括号(),实际上执行的代码是({} + {})。
//({})+{}  --> 所有浏览器都输出'[object Object][object Object]'
{} + [] = 0; //同样的把{}当作区块语句
[] + {} = '[object Object]' 
{1,2,3} + [1,2] == NAN //相当于执行 +[1,2]; [1,2]的原始值为'1,2',toNumber(1,2) = NAN
{1,2,3} + [1] = 1;//相当于执行 +[1]; [1]的原始值为'1',toNumber(1) = 1
[] + {} === {} + [] // --> true 左边和右边都是'[object Object]'
{} + [] === [] + {} // --> true 同上 在FF和IE11下为false
[+false] + [+false] + [+false] = '000';
[+false] + [+false] + [+false] - [+false] = 0;
parseInt('infinity') == 0 / 0; // --> false NaN != NaN
1<2<3 // --> true < 3 --> 0 < 3 --> true
3>2>1 // --> true > 1 --> 0 > 1 --> false 
isNaN(false) // -->false
//运算符优先级 [] > 一元操作符+ > ++ > +
[[][[]]+[]][+[]][++[+[]][+[]]] = 'n' // --> ['undefined'][0][++[0][0]] -- > ['undefined'][0][1] --> 'n' ++[0][0] = 1 --> ++ a(a=0) -->1 自增和自减运算符只能用于操作变量,不能直接用于操作数值或常量!例如 5++ 、 8-- 等写法都是错误滴!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值