Title: Javascript 一行能装逼的JavaScript代码 [fork]

Categories: javascript

Description: 一行能装逼的JavaScript代码

Keywords: javascript,java

一行能装逼的JavaScript代码。

代码学习

date:2017-05-01 author:zhangjianxin

1. 一行神奇的JS代码,当时我就震惊了,这不就是传说中的ZB神奇么… … 哈哈。

一、JS运算符的优先级

二、根据此规则,我们把这一串运算分为以下16个子表达式:

三、JS的类型转化

预处理结束,接下来需要运用的就是javascript的类型转化知识了。我们先说说什么情况下需要进行类型转化。当操作符两边的操作数类型不一致或者不是基本类型(也叫原始类型)时,需要进行类型转化。先按运算符来分一下类:

减号-,乘号*,肯定是进行数学运算,所以操作数需转化为number类型。

加号+,可能是字符串拼接,也可能是数学运算,所以可能会转化为number或string

一元运算,如+[],只有一个操作数的,转化为number类型

下面来看一下转化规则。

  1. 对于非原始类型的,通过ToPrimitive() 将值转换成原始类型: ToPrimitive(input, PreferredType?)

可选参数PreferredType是Number或者是String。返回值为任何原始值。如果PreferredType是Number,执行顺序如下:

如果input为primitive,返回

否则,input为Object。调用 obj.valueOf()。如果结果是primitive,返回。

否则,调用obj.toString(). 如果结果是primitive,返回

否则,抛出TypeError

如果 PreferredType是String,步骤2跟3互换,如果PreferredType没有,Date实例被设置成String,其他都是Number

  1. 通过ToNumber()把值转换成Number,直接看ECMA 9.3的表格 规则如下:

  2. 通过ToString()把值转化成字符串, 直接看ECMA 9.8的表格

规则如下: