关于javascript:你不知道的typeof-string-竟然等于object

4次阅读

共计 1593 个字符,预计需要花费 4 分钟才能阅读完成。

写在结尾

  • 越是高级的岗位,从事越底层的工作,就越须要你对基础知识扎实,我当前不会再跟以前一样搞那么十几个的手写源码教程了,会更专一根底
  • 今天是 1024, 我会在公众号送出【100 个现金红包】, 不关注 也能够参加抽奖,大家记得参加就好。(并非为了宣传公众号,就简略发个福利,让大家快乐冷落下, 不少号主也常常抽到我的礼品)
  • 明天钻研的是 字符串

正式开始

  • 为什么要钻研字符串

    • 因为 JS 有一个非凡点:typeof null后果是object
  • 还有一个起因是:字符串居然有办法,然而它又不能够设置属性。让咱们用代码揭晓
    const str = '前端巅峰 Peter 老师牛逼'
    str.xxoo = '你关注了吗?'
    console.log(str.xxoo, 'xxoo')
  • 后果输入:undefined
  • 为什么?

    • 因为字符串是根底数据类型,具体答案看前面。

可是字符串为什么又有办法?

  • 用代码谈话:
    const str = '前端巅峰 Peter 老师牛逼'
    console.log(str.substring(1), 'xxoo')
  • 后果输入:端巅峰 Peter 老师牛逼
  • 划重点思考:为什么这个字符串 又有了办法?明明它只是一个 字符串 啊!

被遗留的创立创立字符串办法

  • 还有一种创立字符串办法,咱们忘了。
    const str = new Object('前端巅峰 Peter 老师牛逼')
    console.log(typeof str, 'str')
  • 打印后果:obect
  • 通过 new Object 创立的字符串,居然 typeof 后果是object, 那么我想,会不会是以某种状况拜访字符串时,会主动转换成这样后果呢?

揭晓答案

  • 咱们创立好了字符串后,通过平时的模式 例如:const str = '特皮牛逼', 而后再去调用它的办法时,会有以下几个步骤:

    • 申明字符串:const str = '特皮牛逼'
    • 拜访它的属性(办法):str.substring(1)
    • 以读模式拜访 str 这个字符串,会有接下来几个步骤

      • new String 返回一个实例
      • 调用实例上的 substring 办法
      • 销毁实例
      • 我之前文章提到过,JS外面的字符串一旦创立,他们的值就不能扭转。要扭转某个变量的保留的的字符串,首先要销毁原来的字符串,而后再用另外一个蕴含新值的字符串填充该变量
      • 所以下面这段代码,实在的运行应该是:
原始代码:const str = 'Peter 老师 666'
str.substring(1)
真正外部执行的是:let str = new String('Peter 老师 666')
let str1 = str.substring(1) 
str = null 

重点:JS外面的字符串一旦创立,他们的值就不能扭转。要扭转某个变量的保留的的字符串,首先要销毁原来的字符串,而后再用另外一个蕴含新值的字符串填充该变量

那么为什么给字符串设置属性为什么有效呢?

  • 咱们申明:const str = '前端巅峰'
  • 而后给它设置属性 str.xxoo = 'xxoo'
  • 而后咱们读取它的属性str.xxoo
  • 这期间经验了什么:

    • str.xxoo = 'xxoo'时,首先会创立一个实例,给这个实例上设置 xxoo 属性的值为:xxoo
    • 当这行代码执行完了,这个实例就销毁了
    • 于是当咱们拜访 str 的时候,并没有这个属性

这就叫原始值包装类型,它的申明周期只是这一行拜访它的代码执行完就销毁了。这是它与援用类型的区别,咱们通过 new String()创立的实例就是一个援用类型,所以它是一个object.

通过 new String 创立的实例是一个对象(援用类型)

  • 代码:
    const str = new String('前端巅峰 Peter 老师牛逼')
    console.log(str, 'str')

  • 所以 typeof str 失去的后果是:object

写在最初

  • 如果有什么写得不好的中央,能够在上面评论指出,平时比较忙,当前会尽量写一些根底、底层被忘记的知识点, 不忘初心, 写文章为了让更多人学到他们想要的
  • 如果感觉写得不错,点个 赞 / 在看 / 关注 吧, 公众号:[前端巅峰]
正文完
 0