当前位置: 首页 > 后端技术 > Node.js

你不知道的typeof字符串等于object

时间:2023-04-03 14:43:43 Node.js

写在开头。越高级的职位,从事的职位越低,越需要扎实的基础知识。我不会像以前那样搞十几个了。手写源码教程,我更注重基础明天1024,我会在公众号送出【100现金红包】,不关注的可以参与抽奖,记得参与哦。(不是为了推广公众号,只是简单的发个福利,让大家开心热闹,很多号主经常收到我送的礼物)今天的研究是关于弦乐的。为什么要研究字符串,因为JS有一个特殊的Point:typeofnull的结果是一个对象。还有一个原因:字符串有方法,但是不能设置属性。下面用代码来揭秘一下conststr='前端巅峰彼得先生牛逼'str.xxoo='你关注了吗?'console.log(str.xxoo,'xxoo')结果输出:undefined为什么?因为string是基本数据类型,具体答案见后面。但是为什么字符串有方法呢?用代码说话:conststr='Mr.前端巅峰彼得先生牛逼'console.log(str.substring(1),'xxoo')结果输出:端巅峰彼得先生真牛逼。想一想:为什么这个字符串会再次出现method?显然它只是一个字符串!legacycreatecreatesastringmethod还有一个createstring方法,我们忘记了。conststr=newObject('前端峰老师Peter真棒')console.log(typeofstr,'str')打印结果:obect通过newObject创建的字符串,typeof的结果是object,所以我想,会不会在某种情况下访问字符串的时候自动转换成这样的结果呢?揭晓答案在我们创建了字符串之后,通过通常的形式如:conststr='special',然后调用它的方法,会有以下步骤:声明字符串:conststr='special'来访问它properties(methods):str.substring(1)以read方式访问stringstr,接下来几步newString返回一个实例调用实例上的substring方法销毁实例之前如文中所述,一旦JS中的字符串是创建好的,它们的值是不能改变的。改变一个变量保存的字符串,首先销毁原来的字符串,然后用另一个包含新值的字符串填充变量所以上面的代码,真正的操作应该是:原代码:conststr='Mr.Peter666'str.substring(1)内部其实执行的是:letstr=newString('Mr.Peter666')letstr1=str.substring(1)str=null重点:JS中的字符串一旦创建,其值就不能变了。要更改变量保存的字符串,首先销毁原始字符串,然后用另一个包含新值的字符串填充变量。那么为什么给字符串设置属性是无效的呢?我们声明:conststr='front-endpinnacle'然后给它设置属性str.xxoo='xxoo'然后我们读取它的属性str.xxoo这期间发生了什么:str.xxoo='xxoo',它会先创建一个实例,在这个实例上设置xxoo属性的值:xxoo当这行代码执行时,这个实例就被销毁了。所以我们访问str的时候,是没有这个属性的。这称为原始值包装类型,它的声明循环在访问它的代码行执行后才被销毁。这就是它和引用类型的区别。我们通过newString()创建的实例是一个引用类型,所以它是一个对象。通过newString创建的实例是一个对象(引用类型)代码:conststr=newString('前端皮特先生的巅峰真棒')console.log(str,'str')这样得到的结果bytypeofstr是:对象写在最后。如果有写的不好的可以在下方评论指出,平时比较忙,以后会尽量把一些基础的和遗忘的知识点写在最下面。我不会忘记自己的初衷,写文章让更多的人学到他们想要的东西。:【前峰】