老师详细帮我讲讲这句话是什么意思

老师详细帮我讲讲这句话是什么意思

if (Object.prototype.toString.call(data) === '[object Array]') {  //[object Array] 这种写法是什么操作

                return data;

            }


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕慕子 2021-09-26 17:12:04

同学你好,这句代码的意思是判断data是否为数组,具体可以参考如下解析

1、在JavaScript里使用typeof判断数据类型,对于对象和数组这些引用类型,使用typeof操作符检测时,返回结果都是object,所以无法通过typeof操作符检测是否为一个数组。如下:

https://img1.sycdn.imooc.com//climg/61503218095edab504560273.jpg

2、JavaScript语法中规定,toString为Object的原型方法,返回结果为字符串"[Object type]",其中的Object是固定的,后面的type表示对应的类型。例如:对象返回结果为"[Object Object]",示例:

https://img1.sycdn.imooc.com//climg/61503490098d184305180206.jpg

而Array等作为Object的实例,调用toString方法时,返回结果本来应该是"[Object Array]",但是由于Array上重写了toString方法(也就是说Array上有自己的toString方法),导致数组在调用toString方法时,实际上返回的是数组元素组成的字符串。示例:

https://img1.sycdn.imooc.com//climg/61503631097c336804900214.jpg

所以使用数组直接调用toString方法,并不能得到对应的数据类型,确定它是一个数组。

因此,在想要得到数据的具体类型时,需要调用Object原型上的toString方法,然后结合call方法改变其执行上下文为需要测试的数据即可。

示例:改变执行上下文为数组

https://img1.sycdn.imooc.com//climg/615036f3098455f707120313.jpg

从返回结果"[Object Array]" 可以知道call方法中传入的数据类型为数组。

经过上述分析后,再来看同学粘贴的这句代码,如下:

if (Object.prototype.toString.call(data) === '[object Array]') { 
    return data;
 }

意思是:当Object.prototype.toString(data)返回结果为'[Object Array]'时,满足if条件,表示data是一个数组,直接return返回这个数组

3、"[Object Array]"是js中提供的调用toString方法返回的结果,属于固定的格式。

4、Object.prototype.toString()这种用来判断数据类型的方式,可以作为一个特殊的方法,特殊记忆下,以后遇到了需要判断引用类型等数据类型是否为数组时,可以使用该方法去实现。

祝学习愉快~

  • 提问者 qq_慕神8318241 #1

    想判断是不是数组  为什么不用Array.isArray方法

    2021-09-27 17:09:45
  • 好帮手慕慕子 回复 提问者 qq_慕神8318241 #2

    同学你好,直接使用Array.isArray方法是可以的。

    代码实现的方式不止一种,这里只是提供一个参考的方式,同学自己练习时,可以使用Array.isArray方法进行判断。

    祝学习愉快~

    2021-09-27 17:48:38
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师