奇怪的js对比

37 阅读1分钟
'22'>'111'  - true
22>'111' - false
[22]>[111] - true

先看下第一个,字符串对比,两边就没转成数字了,比的就是ascode,谁的靠后就是谁,2比1靠后 第二个,有一边数字,所以隐式转为数字,22<111 第三个,数组对比的时候,使用toString方法两边对比,化为和1一样的式子,所以是true ​

原型

对象是没有prototype属性的(像string,number,bool这些类型也都是没有的,只有方法function和类class有),但是可以通过Object.getProtoTypeOf()获取对象的原型 ​ 首先我们要明白,任何函数都是function的示例

function a (){}
a.__proto__ ====Object.getPrototypeof(a)=== Function.prototype - true


// 也就是一个数据的__proto === Object.getPrototypeof()

getPrototypeOf是获取构造当前对象的原型,比如var aa = new a(),那么Object.getPrototypeOf(aa) == a.prototype

函数名不可修改

神奇的eval

function a(){}
eval('a') // function a(){}
eval(a) // function a(){}

正则的隐式转换

正则.test发现参数不是string时,会把他们自动转了,String();

Date的定义

注意new Date('2014-03-19')表示的是2014年3月19号 new Date(2014,03,19)表示的是2014年4月19号