首页 > 其他分享 >01_JS技巧

01_JS技巧

时间:2023-05-02 17:22:56浏览次数:54  
标签:01 target 对象 函数 数据类型 JS isType prototype 技巧

1.判断对象数据类型

示例代码如下
    const isType = (type) => (target) => `[object ${type}]` === Object.prototype.toString.call(target)
    const isArray = isType('Array')
    const isObject = isType('Object')
    const isBoolean = isType('Boolean')
    console.log(isArray({}))
    console.log(isObject({}))
    console.log(isBoolean(false))
知识拓展
  • js 一共有五种基本数据类型:Undefined、Null、Boolean、Number、String、Symbol(代表创建后独一无二且不可变的数据类型)、BigInt(表示任意精度格式的整数)
  • 复杂(引用)数据类型:对象、数组和函数
  • 二者之间的区别:存储位置不同

1、基本数据类型存储在栈(stack)中的简单数据段,占据空间小、大小固定,属于被频繁使用数据,所以放入栈中存储;

2、复杂数据类型存储在堆(heap)中的对象,占据空间大、大小不固定,如果存储在栈中,将会影响程序运行的性能;在栈中存储了指针,该指针指向堆中该实体的起始地址,当解释器寻找值时,会首先检索其在栈中的地址,取得地址后从堆中获得实体。

3、注:在javascript中是不允许直接访问保存在堆内存中的对象的,所以在访问一个对象时,首先得到的是这个对象在堆内存中的地址,然后再按照这个地址去获得这个对象中的值
参考:https://blog.csdn.net/jiangjuanjaun/article/details/80327342


代码解析
  • JavaScript 调用 toString 方法将对象转换为一个原始值;
  • 要将基本的 Object.prototype.toString() 用于重写的对象(或者在 null 或 undefined 上调用它),
    需要在它上面调用 Function.prototype.call() 或者 Function.prototype.apply(),将要检查的对象作为第一个参数传递(称为 thisArg)
  • Object.prototype.toString() 返回 "[object Type]",这里的 Type 就是对象的类型

注意,target 和 type 不是同一个值,它们分别指代不同的参数。
type 是一个字符串参数,它传递给 isType 函数作为外部函数的参数,如isType('Array')里的Array。

而target 参数是通过返回的内部函数传递进来的。当调用返回的内部函数时,它接受一个参数,这个参数就是 target,表示我们要检查的目标对象,如isArray({})中的{}

  • 总的说来,target 是 isType 高阶函数返回的内部函数的参数,它指的是作为参数传递给内部函数的值,即最外层函数传的值

标签:01,target,对象,函数,数据类型,JS,isType,prototype,技巧
From: https://www.cnblogs.com/hanjiangxue-/p/17367949.html

相关文章

  • [NOIP2017 普及组] 跳房子
    这是一道很复杂有趣的题目题目描述跳房子,也叫跳飞机,是一种世界性的儿童游戏,也是中国民间传统的体育游戏之一。跳房子的游戏规则如下:在地面上确定一个起点,然后在起点右侧画 n 个格子,这些格子都在同一条直线上。每个格子内有一个数字(整数),表示到达这个格子能得到的分数。玩家......
  • 23.5.2 NOIP2011 Day1提高游记
    今天做的比较得愉快快呢,除了第三题hh1.铺地毯这题我不做太多评价,纯纯的一道大水题。注意遍历数据的时候倒着遍历,还有就是不能用二维数组,会MLE。code:1#include<bits/stdc++.h>2#defineN100053usingnamespacestd;4inta[N],b[N],g[N],k[N];5inlinelongl......
  • DUTCTF 201x RE20
    http://www.shiyanbar.com/ctf/50从FLAG上来看,应该是DUTCTF的原题,中等难度。20分也不高。首先搜索字符串,找到flag字样,然后上溯到函数头。之后对这段汇编代码进行分析,等效的伪代码是:charstr1[0x32];//ebp-0x64charstr2[0x32]="kow"*7;//ebp-0x44charstr3[0x32]=......
  • 01 ETH-以太坊概述
    《区块链技术与应用》课程链接:https://www.bilibili.com/video/BV1Vt411X7JF/?spm_id_from=333.337.search-card.all.click01ETH-以太坊概述目录01ETH-以太坊概述比特币区块链1.0,以太坊区块链2.0。比特币出块时间10分钟,以太坊出块时间十几秒,以太坊基于GHOST的共识协议改进......
  • unity发布到4399的webgl模式问题:FRAMEWORK.JS中的WEBREQUEST_SEND括号内的函数(不能有
    在发布4399的时候,之前遇到过这个问题,解决方法当然就是删除这个函数啦。步骤也很简单,但是刚开始摸不着头脑搞了好久,最后发现发布的时候有个加密选项,选择不加密,后面build的文件里面就可以进行打开修改,按照要求修改函数即可。......
  • Three.js#04#Responsive Design&Scenegraph
    参考https://threejs.org/manual/#en/responsive和https://threejs.org/manual/#en/scenegraph前者主要是说怎样创建一个响应式的three.js应用,就是在变化屏幕大小的时候,画面不会畸形。后者是再说,怎么组合小的组件变成一个大的组件(依赖于一个空组件object3D)下面是示例代码:index.......
  • ngxin 配置 二级目录使用nodejs处理
    ngxin配置location/napi{proxy_passhttp://127.0.0.1:7018;proxy_set_headerHost$host:$server_port;proxy_set_headerX-Real-IP$remote_addr;proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;proxy_set_h......
  • 01 BTC-密码学原理
    《区块链技术与应用》课程链接:https://www.bilibili.com/video/BV1Vt411X7JF/?spm_id_from=333.337.search-card.all.click01BTC-密码学原理目录01BTC-密码学原理哈希部分签名部分比特币加密货币(crypto-currency)哈希部分:哈希函数(cryptographichashfunction):抗碰......
  • 将ansible的输出转换为JSON格式
    第一步找到ansible.cfg我的ansible.cfg的文件在/etc/ansible文件夹的下面。可以使用Linux命令行进行切换到这个文件夹下面。cd/etc/ansible第二步,修改ansible.cfg文件,在配置文件中添加以下的配置。[defaults]stdout_callback=jsonbin_ansible_callbacks=True ......
  • 01 Docker基础
    第一章Docker基础目录第一章Docker基础一、Docker简介1Docker是什么?2为什么使用Docker?3Docker的架构与结构4官方资料5Docker特点5.1优点5.2缺点二、Docker快速入门1Docker历程2官方要求3Docker安装4Docker加速器5Docker其它简介5.1Docker的基本命令格式5.2删除Do......