[J框架知识扫盲]之Object.prototype.toString.call()

用过Jquery的朋友都知道,Jquery是通过Object.prototype.toString.call还判断对象的类型的,那究竟如何做呢?

 

来到http://www.ecma-international.org/ecma-262/5.1/#sec-15.2.4.2的一段话:

 

Object.prototype.toString ( )

 

When the toString method is called, the following steps are taken:

 

1.If the this value is undefined, return "[object Undefined]".

2.If the this value is null, return "[object Null]".

3.Let O be the result of calling ToObject passing the this value as the argument.

4.Let class be the value of the [[Class]] internal property of O.

5.Return the String value that is the result of concatenating the three Strings "[object ", class, and "]".

翻译:

1.如果this的值为undefined,则返回"[object Undefined]".

2.如果this的值为null,则返回"[object Null]".

3.让O成为调用ToObject(this)的结果.

4.让class成为O的内部属性[[Class]]的值.

5.返回三个字符串"[object ", class, 以及 "]"连接后的新字符串.

 

因此通过调用后Object.prototype.toString.call(),都会返回 [object class]的样式,我们可以先记录起这些样式,反过来判断。

var class2type = {},     //用于记录[object class]样式
objs = "Boolean Number String Function Array Date RegExp Null Undefined".split(" ");
for (var i = 0, l = objs.length; i < l; i++) {
     class2type[ "[object " + objs[i] + "]" ] = objs[i].toLowerCase();
}

function type(obj) {
     return class2type[ Object.prototype.toString.call(obj) ] || "object";
}

 

 

深度学习工具包 DeepLearningToolbox 深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge") 立即下载

相关推荐

【无线通信】射频杂散(RF Spurious Emissions)

射频杂散(RF Spurious Emissions)是指在无线通信系统中,除了在指定频率范围内的预期信号之外,任何不需要的或非预期的射频信号。这些杂散信号可能会干扰其他通信系统,降低系统性能,并违反无线电通信法规。射频杂散通常包括谐波、次谐波、互调产物和其他非线性失真所产生的信号。

qq_38801607的博客 5427

如何判断数据是什么类型Object.prototype.toString.call(A)

判断数据类型的Object.prototype.toString.call()

AiHongHong_的博客 301

嵌入式存储实战:FAL+SFUD+flashDB三件套在STM32上的完整移植指南(附避坑技巧)

本文提供了一套在STM32上完整移植FAL、SFUD与flashDB嵌入式存储框架的实战指南。详细解析了从SPI驱动配置、SFUD设备识别、FAL抽象层分区到flashDB键值数据库初始化的全流程,并分享了关键的避坑技巧与性能优化建议,帮助开发者构建稳定可靠的嵌入式存储系统。

rnn9storyteller的博客 1017

Object.prototype.toString.call个人理解

Object.prototype.toString.call的作用,个人理解,代码拆分讲解,涉及原型、原型链等相关知识。

Aer_7z的博客 3147

微信小程序推送微信服务号模板消息

微信小程序中发送微信服务号模板消息,无需用户手动确认订阅,无需绑定开放平台,无需使用UnionId。

qq_20751269的博客 1559

31、摩擦学中的材料选择

本博文深入探讨了摩擦学应用中材料选择的重要性,分析了材料的机械、物理和化学属性对摩擦学性能的影响。同时介绍了材料匹配原则、处理方法及表面涂层技术,以优化耐磨性和抗腐蚀性。通过实际案例和评估方法,为读者提供了系统化的材料选择流程和决策依据。

juice的博客 246

浅谈Object.prototype.toString.call(obj)功能及原理

Object.prototype.toString.call(obj)的功能 可能作为程序员以及即将迈入程序员门槛的小伙伴都知道Object.prototype.toString.call(obj)方法,功能简单但是确是类型检测界的“扛把子”。 首先来讲,对刚接触的人来说,我们为什么要使用这种奇怪的方法呢?typeof也可以检测类型,然而它有什么优势?我们来引入一道JavaScript的题目来参考...

寒烟说的博客 4万+

手把手教你学Simulink——基于Simulink的电压型 vs 电流型整流器性能对比

摘要:本文基于Simulink平台对比分析了电压型整流器(VSR)和电流型整流器(CSR)的性能差异。VSR采用电容滤波,具有高功率因数(PF>0.99)、低输入电流THD(<3%)等优势,但动态响应较慢;CSR采用电感滤波,动态响应快(<0.05s),但THD较高(5%~8%)。研究建立了统一测试平台,详细对比了两者在稳态性能、动态响应、效率等方面的差异,并给出了控制算法实现和参数优化建议。通过量化分析,为电力电子工程师提供了拓扑选型依据,可根据恒压/恒流需求选择最优方案,有效缩短开发周

MHD0815的博客 173

Object.prototype.toString和call()

Object.prototype.toString.call(arg)详解 经常能碰到Object.prototype.toString.call对参数类型进行判断,一开始只知道怎么使用,却不了解具体实现的原理,最近恶补了一下相关知识,写个笔记加强理解,有什么不对的请指教。 首先看一下针对不同类型的参数得到的结果,加上浏览器都兼容,所以,这也成为经常用于参数类型判断的做法 Object.prototype.toString.call([]) //"[object Array]" Object.protot

w211312343的博客 1475

大聪明教你学Java | Seata 2.5 从下载到运行:全流程编译部署教程

Seata 2.5 版本带来了不少特性优化,但实际部署时却发现一个尴尬问题:全网找不到一篇完整覆盖「Git 源码下载→本地编译→环境配置→启动验证」的实操教程。作为一名踩遍无数坑才成功跑通的开发者,我深知这个过程的煎熬:Git 拉取源码后编译失败、依赖版本冲突、配置文件参数混乱、启动时端口占用或连接报错… 每一个坑都能耗费数小时排查。为了让后续开发者少走弯路,我将自己从0到1的完整实操经验整理成文,跟着步骤走即可成功运行 Seata 2.5.

不肯过江东丶 2072

74、光谱成像在电子内窥镜及色彩理论中的应用

本文探讨了光谱成像在电子内窥镜中的应用及其与色彩理论的深度融合。通过分析FICE技术、色彩再现模型及胃黏膜光谱测量,展示了光谱信息在提升医学诊断准确性方面的潜力。同时,系统阐述了颜色的物理属性、标准表示方法、同色异谱现象、颜色测量技术(密度法与比色法)以及CIELAB等均匀颜色空间的构建原理。结合流程图与对比表格,梳理了从光信号获取到颜色处理的完整路径,并展望了人工智能与新型视觉模型在未来医疗成像与色彩科学中的发展方向。

g2h3i4j5的博客 153

Object.prototype.toString.call()方法使用

前端开发项目中,常常会遇到判断一个变量的数据类型等操作,在 JavaScript 里使用typeof来判断数据类型,只能区分基本类型,即 “number”,”string”,”undefined”,”boolean”,”object” 五种。对于数组、对象来说,其关系错综复杂,使用typeof都会统一返回 “object” 字符串。此时,我们可以使用Object.prototype.toString.call(var)能判断具体的类型数组; 具体实例如下: 1.判断基本类型: O...

木易的博客 1万+

【基础-单选】Row组件中有两个Text组件,如果使用justifyContent对齐方式,下面哪个属性可以实现左右两端对齐:

Row组件中有两个Text组件,如果使用justifyContent对齐方式,下面哪个属性可以实现左右两端对齐

江拥羡橙的博客 1304

js中的Object.prototype.toString.call()方法

在JavaScript里使用typeof判断数据类型,只能区分基本类型,即:number、string、undefined、boolean、object。 对于null、array、function、object来说,使用typeof都会统一返回object字符串。 要想区分对象、数组、函数、单纯使用typeof是不行的。在JS中,可以通过Object.prototype.toString方法,判断某个对象之属于哪种内置类型。 分为null、string、boolean、number、undefined、a

Amelian的博客 3207

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Object.prototype.toString.call(obj)的功能及原理

Object.prototype.toString.call(obj) 这句话的意思是让我们用Object原型上的toString方法(见下图原型链)作用在传入的obj中(通过call将this指向obj),那么我们知道数组或者其他引用类型本身也有toString()方法,那我们为什么非要用Object.prototype呢? 图一:原型链图 我们来看下Array等引用类型的toString方法的输出 图二:不同类型上的toString方法 除了null和undefined上没有...

少昊的博客 1251

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

object.prototype.call

object.prototype.call /* * object.prototype.call * @ 当一个object没有某个方法,但是其他的有,我们可以借助call或apply用其它对象的方法来操作。 * @ 语法: fun.call(thisArg[, arg1[, arg2[, ...]]]) * @ param: thisArg {object} //...

weixin_30408309的博客 243

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Object.prototype.toString.call()如何理解

Object.prototype.toString​​​​​​​.call()是 JavaScript 中用于获取对象类型的一种常见方式。这方法通常用来判断某个值的精确类型,因为 JavaScript 的typeof 运算符虽然能用来区分基本数据类型,但对于对象类型的区分并不够精确。

m0_67992720的博客 1306

JavaScript 判断数据类型方法总结:Object.prototype.toString.call(obj)功能及原理

了解JS判断数据类型的三种常方式,以及Object.prototype.toString.call( )的功能和原理。

weixin_50999722的博客 1123

内部属性 [[Class]] 以及 Object.prototype.toString.call 详解

JavaScript中的[[Class]]和Object.prototype.toString.call

Yue 476

类型检测Object.prototype.toString 方法详解

必要性call或apply确保的this指向目标对象,绕过重写逻辑,直接读取底层类型标识。底层逻辑:通过[[Class]]或生成,实现精确类型检测。应用场景:类型判断(如的兼容实现)、调试、框架底层逻辑等。目标对象:通过callapply绑定的具体实例,用于精确类型检测。无call的this指向:默认指向或调用对象自身方法,导致类型判断失效。核心用途:跨对象类型检测、绕过重写逻辑、读取底层类型标识。

2301_81854535的博客 1089

JavaScript原生对象-Object对象详解

JavaScript 中有个全局函数Object(),它是一个构造函数,js中所有的对象都继承Object函数的原型对象。

dreamingbaobei的博客 1125

vue js中使用typeof和Object.prototype.toString.call()判断类型(超详细),浅析call()和apply()的区别

vue js中使用typeof和Object.prototype.toString.call()判断类型(超详细),浅析call()和apply()的区别

weixin_43312391的博客 5433

为什么用Object.prototype.toString.call(obj)检测对象类型?

面试题 最近做了做一些js面试25 Essential JavaScript Interview Questions*,其中第一道是:使用typeof bar === "object"检测”bar”是否为对象有什么缺点?如何避免? 这是一个十分常见的问题,用 typeof 是否能准确判断一个对象变量,答案是否定的,null 的结果也是 object,数组的结果也是 object,有时候我们需要的是...

weixin_45576567的博客 385

判断数据类型的方法是Object.prototype.toString.call, 为什么要通过call来调用?

而Object.prototype.toString方法的输出本来就是 [object XXXX],其中XXXX就是调用该方法的数据类型,即obj的数据类型是Object,故toString方法输出显示 [object Object]。这也是为什么需要用call调用了,因为每个数据的原始toString方法被改写,通过call,让该数据调用Object上的toString方法,用以判断当前数据的类型。我们知道,不同的数据类型都有toString方法,通常是将数据转换为字符串类型,如。

weixin_64012291的博客 922

开箱秘籍,一招鲜吃遍天的Object.prototype.toString.call

面试官见了也给赞同,一招鲜吃遍天,最可靠的数据类型判断Object.prototype.toString.call

SailingCoder的博客 1826

标梵分享JS中如何检查对象是否为数组?

简介 在 JS 中使用数组是一种常见操作,有时在开发中,获得一个需要作为数组的变量,但是我们不确定它是否是数组,那要怎么去判断是否为数组呢? JS 中的非原始数据类型都是对象(函数具有自己的类型,但它们也是对象)。因此,仅使用typeof运算符来判断是不够的: letresult={subject:'Science',marks:97}; letnumbers=[1,2,3,4,5]; console.log(typeofresult);//Object con...

标梵互动 376
上一篇: [J框架知识扫盲]之querySelectorAll的应用2
下一篇: [Javascript技巧]代码编辑器的行号,通过hash定位
staffrobot
博客等级 码龄19年 6粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值