IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

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

    张 鑫旭发表于 2024-10-24 14:57:18
    love 0

    by zhangxinxu from https://www.zhangxinxu.com/wordpress/?p=11387
    本文可全文转载,独立域名个人网站无需授权,但需要保留原作者、出处以及文中链接,任何网站均可摘要聚合,商用请联系授权。

    喜鹊鸟类占位图

    一、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天的就好钓多了,都是长江鳊(翘嘴和鳊鱼杂交品种),不过大风大雨的,做钓体验不怎么好。

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

    渔获照片

    本文为原创文章,会经常更新知识点以及修正一些错误,因此转载请保留原出处,方便溯源,避免陈旧错误知识的误导,同时有更好的阅读体验。
    本文地址:https://www.zhangxinxu.com/wordpress/?p=11387

    (本篇完)



沪ICP备19023445号-2号
友情链接