Object.is/===、数组at/直接索引、substring/slice的区别

这篇文章发布于 2024年10月24日,星期四,22:57,归类于 JS API。 阅读 2168 次, 今日 8 次 2 条评论

 

喜鹊鸟类占位图

一、Object.is和===的区别

Object.is()静态方法可以比较两个对象是否严格相等,在绝大多数情况下,和三等于号===的作用是一样的。

除了下面两种情况:

1. NaN的比较

如果使用等于好比较,则NaN和NaN的返回结果是false

NaN === NaN
// false

但使用Object.is()比较则返回的是true

Object.is(NaN, NaN)
// true

2. +0和-0的比较

一句话,=== 是认为相等的,而Object.is()认为是不相等的,代码示意:

+0 === -0
// true

Object.is(+0, -0)
// false

二、数组at方法和直接索引的区别

已知一个数组 arr = [1,2,3],则下面两种写法均等返回数组的第二项内容:

const arr = [1,2,3];
console.log(arr.at(1), arr[1]);
// 返回结果:2 2

那问题来了,数组使用at()方法获取选项,和直接使用索引获取有什么区别呢?

区别就在于参数或索引值为负数的时候,直接看例子:

const arr = [1,2,3];
console.log(arr.at(-1), arr[-1]);
// 返回结果:3 undefined

是这样的,当Array.prototype.at()方法的参数是负数的时候,其参数值等于该负数和整个数组长度的和。

因此,在上面的例子中,arr.at(-1)其实等于 arr.at(-1 + 3) => arr.at(2) => 3

这就是最后结果3的由来。

如果负数的绝对值比数组的长度还要大,或者参数是正值,但是超出数组范围,则返回undefined,因此,就会有下面这样的代码运行效果。

const arr = [1,2,3];
console.log(arr.at(-4), arr[-4]);
// 返回结果:undefined undefined

console.log(arr.at(3), arr[3]);
// 返回结果:undefined undefined

三、substring/slice的区别

字符串的substring()slice()方法在绝大数时候是通用的,可以对字符串进行复制。

区别在于下面这两种场景:

  1. substring()的参数为负时,视为0,slice()的允许负数参数,例如:
    'HTML并不简单'.substring(-2)
    // 返回 'HTML并不简单'
    
    'HTML并不简单'.slice(-2)
    // 返回 '简单'
  2. substring()的第一个参数大于第二个时,会自动交换,而slice()的第一个参数大于第二个时,输出空字符串,例如:
    'HTML并不简单'.substring(4, 2)
    // 返回 'ML'
    
    'HTML并不简单'.slice(4, 2)
    // 返回 ''

如果大家无法保证参数的前后大小顺序,则可以考虑使用substring()方法,其余使用,均建议使用slice()方法,原因无他,名称简短更好记忆。

四、结束语

JS中还有很多其他作用类似的方法和写法,这就就不一一举例了。

接下来是扯淡碎碎念时间。

上周五去体检了,和之前几年一样,这个彩照啊,慢得要死。去年就说不来这家,结果今年还来,唉,公司体检那几个单位,家附近就这一个。

好在这一次请假了,时间不急,且早有预期,没有之前几年那么令人抓狂。

小朋友周五秋游,从起床醒来到回家,嘴巴乐呵得就没合上过,去海昌海洋馆看了心心念念的………………奥特曼!这玩意,啧啧啧,真是烧金库。门票150就不说了,就那荧光棒,就是演唱会的那种荧光棒,外面几块钱一个的,你猜这里多少钱一根。超乎你的想象,128块钱一个,128呀!说是给奥特曼什么光的力量复活的,还有披风啥的,都是天价,哦,还有,300多块钱还可以和奥特曼合影5张照片。关键,买的人巨多,我只能说,上海有钱人真多。

周末两天去乡下打卡鱼塘的时候的时候,采购了很多葡萄,都很便宜,5块一斤,最贵的也就8块钱,买了好多,多到都带公司来吃了。

听种葡萄的大叔说,还有一个星期就要下市了,普通,且吃且珍惜。

周末两日钓费都是100元,第一天那个鱼塘,不谈了,难钓的不得了,收获几条野生杂鱼,第2天的就好钓多了,都是长江鳊(翘嘴和鳊鱼杂交品种),不过大风大雨的,做钓体验不怎么好。

这周的话,计划去嘉定的拾光生态去钓混养,周日去壹号钓场去钓鲤鱼,顺便试用几个新饵料。

渔获照片

(本篇完)

分享到:


发表评论(目前2 条评论)

  1. lixingyang说道:

    感谢分享

  2. tung说道:

    有……有点水