Array.prototype.slice.call(arguments)初探

别再为调试发愁!STM32CubeMX+FreeRTOS下,串口printf打印的保姆级配置指南(基于STM32F429) 本文详细介绍了在STM32CubeMX和FreeRTOS环境下实现稳定串口printf打印的配置方法。通过硬件选型、基础配置、线程安全的重定向实现以及高级调试技巧,帮助开发者解决多任务环境下的串口输出问题,提升调试效率。特别适用于STM32F429开发板用户。 阅读详情

引入:在阅读Airbnb的eslint规范时,看到了Array.prototype.slice.call()方法,不太理解为什么这么用。

使用 Array#slice 将类数组对象转换成数组。

function trigger() {

  var args = Array.prototype.slice.call(arguments);

  …

}

Array.prototype.slice剖析

  • Array是javascript的一个类, slice是Array.prototype的一个方法 ,使用方法Array.prototype.slice, slice就是截取,arrayObj.slice(start, [end]) 是截取数组的一部分。
  • call([thisObj[,arg1[arg2[[argN]]]]]) 

thisObj是一个对象的方法 ,arrg1~argN是参数

那么Array.prototype.slice.call(arguments,1);就是把调用方法的参数截取出来。 

如:

 function test(a,b,c,d) 

   { 

      var arg = Array.prototype.slice.call(arguments,1); 

      alert(arg); 

   } 

   test("a","b","c","d"); //b,c,d


arguments剖析

先给个例子,这是jqueyFloat插件里的代码:

if (element.data('jDefined')) {

    if (options && typeof options === 'object') {

        methods.update.apply(this, Array.prototype.slice.call(arguments, 1));

    }

} else {

    methods.init.apply(this, Array.prototype.slice.call(arguments, 1));

}

多次用到 Array.prototype.slice.call(arguments, 1),不就是等于 arguments.slice(1) 吗?

因为arguments并不是真正的数组对象,只是与数组类似而已,所以它并没有slice这个方法,而Array.prototype.slice.call(arguments, 1)可以理解成是让arguments转换成一个数组对象,让arguments具有slice()方法。要是直接写arguments.slice(1)会报错。

typeof arguments==="Object" //而不是 “Array"


原理剖析

Array.prototype.slice.call(arguments)是将具有length属性的对象转成数组,除了IE下的节点集合(因为ie下的dom对象是以com对象的形式实现的,js对象与com对象不能进行转换) 

如:

var a={length:2,0:'first',1:'second'};//类数组,有length属性,长度为2,第0个是first,第1个是second

console.log(Array.prototype.slice.call(a,0));// ["first", "second"],调用数组的slice(0);


var a={length:2,0:'first',1:'second'};

console.log(Array.prototype.slice.call(a,1));//["second"],调用数组的slice(1);


var a={0:'first',1:'second'};//去掉length属性,返回一个空数组

console.log(Array.prototype.slice.call(a,0));//[]


function test(){

  console.log(Array.prototype.slice.call(arguments,0));//["a", "b", "c"],slice(0)

  console.log(Array.prototype.slice.call(arguments,1));//["b", "c"],slice(1)

}

test("a","b","c”);


补充: 

将函数的实际参数转换成数组的方法

方法一:var args = Array.prototype.slice.call(arguments);

方法二:var args = [].slice.call(arguments, 0);

方法三:

var args = []; 

for (var i = 1; i < arguments.length; i++) { 

    args.push(arguments[i]);

}

最后,附个转成数组的通用函数

var toArray = function(s){

    try{

        return Array.prototype.slice.call(s);

    } catch(e){

        var arr = [];

        for(var i = 0,len = s.length; i < len; i++){

            //arr.push(s[i]);

               arr[i] = s[i];  //据说这样比push快

        }

         return arr;

    }

}


附:http://blog.youkuaiyun.com/i10630226



VSCode + Copilot下:配置并使用 DeepSeek 以下是关于在中,通过插件配置并使用系列模型 () 的完整汇总指南。 阅读详情

相关推荐

官网下载stm32Fx固件库(标准外设)详细步骤

官网下载stm32f407固件库(标准外设)详细步骤

qq_52632983的博客 1万+

Array.prototype.slice.call(arguments)

我们知道,Array.prototype.slice.call(arguments)能将具有length属性的对象转成数组,除了IE下的节点集合(因为ie下的dom对象是以com对象的形式实现的,js对象与com对象不能进行转换) 如: 1 var a={length:2,0:'first',1:'second'}; 2 Array.prototype.slice.call(a);/...

weixin_30627341的博客 328

ptrade量化策略之ST股弱转强,回测年化115%

本策略的核心是精选ST股票,国九条过滤,防止直接暴雷退市,只做ST股票的弱转强

qq_29301281的博客 1784

解析 Array.prototype.slice.call(arguments,0)

Array.prototype.slice.call(arguments,0) 经常会看到这段代码用来处理函数的参数 网上很多复制粘帖说:Array.prototype.slice.call(arguments)能将具有length属性的对象 转成数组,除了IE下的节点集合(因为ie下的dom对象是以com对象的形式实现的,js对象与com对象不能进行转换) 关键点: 1、Array是构...

weixin_30369041的博客 129

Python学习(一)

快速入门 1.Linux系统中是可以直接使用Python进行编程,具体如下: 进入Python:在linux的Terminal中输入 Python ,进入Python的命令行; 退出Python:在linux的Terminal中输入quit() 或 exit() 或 ctrl +d ,再回车,退出Python的命令行。 2.python的源程序就是一个特殊格式的文本文件,可以使用任意文本编辑软件做Python的开发。 3.Python程序的文件扩展名通常都是 .py。 4.执行Python程序的方式:在

SummerXRT的博客 1278

硬件工程师的蜗牛成长路

1、《模拟电路课程》R/L/C/继电器/光耦/二极管/三极管/MOS管磁珠/ESD/TVS/肖特基二极管/稳压二极管/保险丝/GDT/TSS/光耦/MOS/运放/BJT比较器/面板开关/按键开关/拨码开关/BUCK/LDO/电源防护器件LM5069单输出PLL/多路输出PLL/单端晶振/差分晶振/晶体(这方面不熟悉,待以后补充)1)速度传感器2)温度传感器3)倾斜角传感器4)火焰传感器5)红外传感器6)呼吸心跳采集chaunganqi1)数字隔离 电平转换芯片/磁隔离/专用隔离芯片。

caozhaokun的博客 1977

js中的作用域与闭包的使用

闭包的作用是函数执行形成的私有作用域,保护里面的变量不受外界干扰的机制,形成一个变量的私有作用域

一个小白的成长历程 183

从零到一:YOLOv8在边缘设备上的轻量化部署实战

本文详细介绍了YOLOv8在边缘设备上的轻量化部署实战,涵盖模型优化、TensorRT加速、剪枝与知识蒸馏等关键技术。通过工业质检和智能门禁项目案例,展示了如何将YOLOv8高效部署到树莓派、Jetson Nano等资源受限设备,显著提升推理速度和降低内存占用。文章还提供了动态分辨率调整、多模型级联部署等实用技巧,助力开发者实现边缘AI应用的高效落地。

weixin_29040367的博客 378

slice()

slice() 作用:返回一个新的数组对象,这一对象是一个由 begin 和 end 决定的原数组的浅拷贝(包括 begin,不包括end)。原始数组不会被改变。 注意:不会改变原数组 描述: slice 不会修改原数组,只会返回一个浅复制了原数组中的元素的一个新数组。原数组的元素会按照下述规则拷贝: 如果该元素是个对象引用 (不是实际的对象),slice 会拷贝这个对象引用到新的数组里。两个对象...

qq_42238554的博客 2168

F5 Shape盾JSVMP核心检测点与无限并发Header生成实战(TikTok/航司)

本文深入剖析了F5 Shape盾结合JSVMP技术的核心风控机制,详细解读了其针对浏览器指纹、行为时序等多维度的检测逻辑。通过实战案例,分享了如何通过逆向分析、精准Hook关键检测点,并构建稳定、高并发的请求Header生成方案,以应对TikTok、航司等平台的高级反爬挑战。

weixin_29325007的博客 1010

[特殊字符] 2026终极实战:Python爬取得物App球鞋实时交易价格 —— 从签名破解到数据可视化全栈指南

价格敏感度:热门鞋款(如Air Jordan 1、Yeezy 350、Dunk SB)价格每分钟都在波动,短线套利空间巨大。稀缺性:限量发售、联名款、地区限定,导致供需关系实时变化。数据壁垒:得物App使用自研WMS签名算法设备指纹绑定动态请求头加密,是爬虫工程师的“练兵场”。本博客将手把手带你从零搭建一套生产级得物球鞋价格爬虫系统,涵盖:抓包与逆向分析(mitmproxy + Frida)签名算法逆向(Python复刻)设备模拟与心跳保活(ADB + uiautomator2)

2201_76125261的博客 1123

javascript中的function 函数名(){}与函数名:function(){}

1、function 函数名(){}; 这是定义一个函数 function myFunction(x,y){ return x+y; } alert(myFunction(2,3));// 调用myFunction方法 2、函数名:function(){}; 是设置一个对象的方法。 var foo={ a:10, b:function(){ alert('我是对象的方法'); } } foo.b();// 调用b方法 ...

weixin_44404948的博客 3320

Unity零基础到进阶 | Unity Shader 深度硬核解析

Unity Shader 是运行在GPU上的可编程渲染程序,是整个引擎渲染体系的算法核心。它通过 Unity 封装的 ShaderLab 语法 + GPU 原生 HLSL 语言编写,定义了「网格数据如何经过光照计算、纹理采样、几何变换、混合测试,最终转化为屏幕像素颜色」的完整规则。 通俗来说:Shader 决定物体「怎么画」,材质(Material)只是 Shader 的参数实例,决定「用什么画」。没有 Shader,材质就是无渲染能力的空壳;没有材质,Shader 无法落地到具体物体。

努力前行,总会成为自己心中的那道光 1万+

Array.prototype.slice.call(arguments,1)

对 Array.prototype.slice.call(arguments,1) 的简要理解。 首先对其进行简要拆分: Array.prototype 属性表示 Array 构造函数的原型,并允许您向所有Array对象添加新的属性和方法。 slice(start,end) 是Array原型上的方法,可以对一个数组进行截取(从start开始,不包含end;如果只有 start 则截取从 start 到数组结束的所有元素。)并返回一个新的数组(浅拷贝)。 call() 简单理解为可以改变对象的this指向

Jqy_111的博客 1787

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Array.prototype.slice.call(arguments)用法

转自:https://www.cnblogs.com/wphl-27/p/10336591.html JavaScript中的Array.prototype.slice.call(arguments)能将有length属性的对象转换为数组(特别注意: 这个对象一定要有length属性). 但有一个例外,IE下的节点集合它不能转换(因为IE下的dom对象是以com对象的形式实现,js对象和com对象不能进行转换) 首先,我们来看看JavaScript中的slice用法, 在JavaScript中Array是一

OldStreet61的博客 1129

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

JS 有趣的应用 :Array.prototype.slice.call(arguments,0)

1。Array.prototype:就是Array的原型,很多时候理解这个原型有点不清不楚的 其实,有点像.NET里的反射 一个类凡是通过prototype加的属性,方法,都可以在这个类的对象里找到 对象. 有时候我们也直接在某一对象添加属性方法,那么只能这个对象里找到,重新创建的对象是没有 刚刚在上一对象里添加的属性方法的 内置的类型可以通过prototype找到内置的属性方法 Ar

王伟峰 5922

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Array.prototype.slice.call(arguments)、Array.prototype.shift.call(arguments)

Array.prototype.slice(begin, end) 作用:slice() 方法返回一个新的数组,由 begin 和 end 决定的原数组的浅拷贝(包括 begin,不包括end)。原始数组不会被改变。 但今天的主题不是它。而是Array.prototype.slice.call(arguments) Array.prototype.slice.call(arguments) 作用: 它的作用是把对象/集合转换成数组 例子1 <div></div> &

weixin_38547641的博客 1278

JS篇-Array.prototype.slice.call()详解

slice.call()这个方法第一次接触的时候很容易迷惑,它使arguments转换为array;更具体的理解是: ==》是能够将具有length属性的arguments转换为数组, 可以理解为 arguments.toArray().slice()); ==>所以,这个过程我们是不是可以理解为 Array.prototype.slice.call(arguments)的实现过程就是把传...

Jishenshen97的博客 1867

js基础进阶--关于Array.prototype.slice.call(arguments) 的思考

欢迎访问我的个人博客:http://www.xiaolongwu.cn Array.prototype.slice.call(arguments)的作用为:强制转化arguments为数组格式,一般出现在框架活插件的源码中 如何理解 上面的代码等价于[ ].slice.call(arguments) 或者随便一个数组调用都行 [1,2,4].slice.call(arguments) ...

积少成多 4370

Array.prototype.slice.apply(arguments)和[].slice.apply(arguments)解析

我们知道,函数内部 arguments 是一个类数组对象,不是真正的数组,因此也无法使用数组的各种方法。想详细了解 argument 对象可以前往函数中的 arguments。 (function fun(){ console.log(arguments.reverse()); //报错 })(); Array.prototype.slice.apply(arguments)和[].slic...

瓜冬瓜的博客 2213

Array.prototype.slice.apply(arguments)

一、理解arguments arguments在JavaScript语法中是函数特有的一个对象属性(Arguments对象),用来引用调用该函数时传递的实际参数 例1:使用Array的一个实例方法slice function test(){ //将参数转为一个数组  var args = Array.prototype.slice.apply(arguments); ale...

小葵坤_易安的博客 955

前端复习--Array.prototype.slice.call(arguments)

Array.prototype.slice.call(arguments)可以将 类数组 转化为真正的数组。面试中常常问到此,但是,为什么呢? 1 首先是Array同Object,Number等 都是一种数据类型的名字,同时Array又是构造函数,每个构造函数都有一个prototype属性指向其原型对象。其原型对象上能取到slice方法。 2 什么是类数组(有length属性,属性值为数字;其

hellokingqwe的博客 5710

arguments和Array.prototype.slice.call(arguments,0);

下列错误的代码:原因是arguments并不是真正的数组。所以并不能直接用forEach来,可以把arguments转换成数组。 function useArguments() {     var sum = 0;      arguments.forEach(function(e){           sum+=e;      });      // for(var i=0;i

Christine95的博客 851

Array.prototype.slice.call方法详解

在很多时候经常看到Array.prototype.slice.call()方法,比如Array.prototype.slice.call(arguments),下面讲一下其原理: 1、基本讲解 1.在JS里Array是一个类 slice是此类里的一个方法 ,那么使用此方法应该Array.prototype.slice这么去用 slice从字面上的意思很容易理解就是截取(当然你不是英肓的话) 这方法如何使用呢? arrayObj.slice(start, [end]) 很显然是截取数组的一部分。 2.我们再看

真爱一生的博客 1239

Array.prototype.slice.call(arguments)的理解

在js中我们经常会看到Array.prototype.slice.call(arguments,0)的写法,这个方法的作用也许大家都明白,那就是把 “类数组对象” 转换成一个真正的数组。 这里涉及到slice()方法和call()方法,所以先简单说说这两个方法。 1、slice() “数组” 和 “字符串” 都有slice方法,这个方法的作用是截取一段数据。它接收两个参数: 第一个参数是要截取的位置索引; 第二参数可选,表示要截取到的结束位置,但是不包括结束位置; 在数组中,该方法的返回值是包含

震撼着 511

Array.prototype.slice.call()——详解

Array.prototype.slice.call()——详解

1157
上一篇: css优先级
下一篇: 左耳朵耗子给出的学习指南
Lilyxiaoxiaowo
博客等级 码龄16年 0粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值