前端analysis | 3w & 1h

《Js》- js原生开发避坑指南

2020-09-30

Array

instanceof

请问下,instanceof 一定能判断类型吗?

1
2
3
4
5
6
7
var iframe = document.createElement('iframe');
document.body.appendChild(iframe);
xArray = window.frames[window.frames.length-1].Array;
var arr = new xArray(1,2,3); // [1,2,3]

arr instanceof Array;

原因如下:
o instanceof Array works correctly only if o is an array created by that page’s original Array constructor(or, equivalently, by use of an array literal in that page)

isArray

请问,如下结果是true? false?

1
Array.isArray(new Uint8Array(32)) 

原因如下:

1
2
3
4
5
# [object Uint8Array]
Array.isArray = function(arg) {
return Object.prototype.toString.call(arg) === '[object Array]';
};

sort

1
2
3
4
5
6
7
# 请问,你想到结果是什么吗?是否会发生异常?

const arr = [1,undefined,2,undefined,4,undefined];
arr.sort((a,b) => {
return a.name > b.name
});

原因如下

If compareFunction is supplied, all non-undefined array elements are sorted according to the return value of the compare function (all undefined elements are sorted to the end of the array, with no call to compareFunction)

String

substr

Date

new Date

1.Date存在浏览器兼容问题,尤其在涉及startTime,endTime等时间排序,Chrome兼容性强,FF,Safari兼容性存在不足。

MDN web docs介绍如下:

code运行效果

  • chrome - 空格、T一样效果

  • firefox - 空格、T一样效果

  • Safari - 空格、T不一样效果

    Date字符串中的T

    2.Date值中,我们常常看到T ,那么T是干嘛的呢?

  • 针对chrome,ff而言,T跟空格都是一样的,标志着时间部分的开始的,但是在safari空格不能生效,上图即可表明。

Boolean

new Boolean

请问如下结果是true? 还是false ?

1
2
var myFalse = new Boolean(false);   
var g = new Boolean(myFalse);

原因如下

  • 得到false值有如下方式:
    1
    2
    3
    4
    5
    var bNoParam = new Boolean();
    var bZero = new Boolean(0);
    var bNull = new Boolean(null);
    var bEmptyString = new Boolean('');
    var bfalse = new Boolean(false);
  • 得到true,有如下方式:
    1
    2
    3
    4
    5
    6
    var btrue = new Boolean(true);
    var btrueString = new Boolean('true');
    var bfalseString = new Boolean('false');
    var bSuLin = new Boolean('Su Lin');
    var bArrayProto = new Boolean([]);
    var bObjProto = new Boolean({});
  • 从上,我们可以看出,myFalse是对象,那么我们得到的就是true.
使用支付宝打赏
使用微信打赏

若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏