判断javaScript变量是Ojbect类型还是Array类型
JavaScript是弱类型的语言,所以对变量的类型并没有强制控制类型。所以声明的变量可能会成为其他类型的变量, 所以在使用中经常会去判断变量的实际类型。 对于一般的变量我们会使用typeof来判断变量类型。
例如:在下面codesandbox中声明一个变量a,并赋值一个字符串'love you forever',然后使用typeof可以获得指定变量的类型,可以在web-preview看到结果是String类型,再次向变量a赋值数字123,则判断的类型为number,我再次向变量a赋值一个对象和一个数组,下面的web-preview结果显示却都是object,what。这是为什么?
所以去MDN查阅相关资料,MDN对于typeof的参数描述内容为"一个表示对象或原始值的表达式"以及对typeof可能返回值如下表:
类型 | 结果 |
---|---|
Undefined | "undefined" |
Null | "object" |
Boolean | "boolean" |
Number | "number" |
String | "string" |
Symbol(es6) | "symbol" |
宿主对象(BOM和DOM) | 取决于具体实现 |
Function | "function" |
其他对象 | "object" |
从表中似乎没有看到Array的字样,说明可能包含在其他对象,所以typeof不适合做array的判断。有没有其他的方式呢?查阅资料发现四种方法.
- 构造方法判断
let numbers = [1, 2, 3, 4, 5]
let isArray = numbers.construstor === Array ? 'yes' : 'no'
console.log(isArray)
- 原型判断
let numbers = [1, 2, 3, 4, 5]
let isArray = Object.prototype.toString.call(numbers) === '[object Array]' ? 'yes' : 'no'
console.log(isArray)
- instanceof判断
let numbers = [1, 2, 3, 4, 5]
let isArray = numbers instanceof Array ? 'yes' : 'no'
c
- Array内置的isArray方法判断
let numbers = [1, 2, 3, 4, 5]
let isArray = Array.isArray(numbers) ? 'yes' : 'no'
console.log(isArray)
下面是用codesandbox执行的结果
不知不觉又爬过了一个坑。编码路上没有捷径,没有代码量的积累,就没有值得飞跃。感谢各位看到这里,希望大家在不断地努力下能早日实现自己的前端梦。
.ipad { min-width: 930px; max-width: 930px; min-height: 588px; max-height: 600px; margin-top: 1.5rem; margin-bottom: 1.5rem; border: 1px solid rgba(255, 192, 203, 1); border-radius: 15px; box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.2); display: flex; flex-direction: column; align-items: center; position: relative }
.ipad::before { content: ""; width: 8px; height: 8px; background-color: rgba(0, 0, 0, 1); border-radius: 50%; position: absolute; top: 0.5rem }
.content { margin-top: 1.6rem; margin-bottom: 2.5rem; width: 94%; border: 2px solid rgba(211, 173, 226, 1); border-radius: 3px; overflow: hidden }
.content iframe { margin-bottom: -9px }
{ width: 4px; height: 4px }
{ background-color: rgba(218, 154, 180, 1); border-radius: 4px }
.content:hover { overflow: auto }
.ipad::after { content: ""; width: 24px; height: 24px; background-color: rgba(255, 255, 255, 1); border: 3px solid rgba(255, 165, 0, 1); border-radius: 50%; position: absolute; bottom: 0.3rem }
判断javaScript变量是Ojbect类型还是Array类型的更多相关文章
- 《JavaScript高级程序设计》读书笔记 ---Array 类型
除了Object 之外,Array 类型恐怕是ECMAScript 中最常用的类型了.而且,ECMAScript 中的数组与其他多数语言中的数组有着相当大的区别.虽然ECMAScript 数组与其他语 ...
- JavaScript系统学习小结——Object类型、Array类型
今天学习JavaSript中引用变量中的Object类型和Array类型: 1. Js中大多数引用类型值都是Object类型的实例,Object类型在应用程序中存储和传输数据时,是非常理想的选择: 创 ...
- 引用类型--Object类型、Array类型
引用类型的值(对象)是引用类型的一个实例.在ECMAScript中,引用类型是一种数据结构,它描述的是一类对象具有的属性和方法. 对象是某个特定引用类型的实例,新对象是使用new操作符后跟一个构造函数 ...
- Object类型与Array类型
总结--JS中的引用类型: Object类型,Array类型,Boolean类型,Number类型,String类型,Date类型, Function类型,RegExp类型,单体内置对象(Global ...
- 判断Javascript变量是否为空 undefined 或者null(附样例)
1.变量申明未赋值 var type; //type 变量未赋值 1. type==undefined //true 2. type===undefined //true 3. typeof(type ...
- Javascript高级程序设计--读书笔记之Array类型
1.数组的lenght属性 数组的lenght属性很有特点---他不是只读的,可以同过修改这个属性来向数组的末尾添值加或删除值, 删除值 var color = ["red", & ...
- object类型转换为Array类型
var obj = {a: 1, b: 2, c: 3}; // .... var arr = []; for(var key in obj){ if(!obj.hasOwnProperty(key) ...
- JavaScript 变量、类型与计算
变量类型 变量计算 变量 题目: JavaScript 中使用typeof能得到的有哪些类型? ``` 1.1 变量类型 (1).js中的数据类型:字符串.数字.布尔.数组.对象.Null.Undef ...
- 第一百零六节,JavaScript变量作用域及内存
JavaScript变量作用域及内存 学习要点: 1.变量及作用域 2.内存问题 JavaScript的变量与其他语言的变量有很大区别.JavaScript变量是松散型的(不强制类型)本质,决定了它只 ...
随机推荐
- 早产的《HelloGitHub》第 65 期
兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 分享 GitHub 上有趣.入门级的开源项目. 这里有实战项目.入门教程.黑科技.开源书籍.大厂开源项目等,涵盖多种编程语言 Pyt ...
- docker加速器,设置cdn
添加加速器 vim /etc/docker/daemon.json 添加如下内容 { "registry-mirrors": ["https://registry.doc ...
- Quartz任务调度(2)CronTrigger定制个性化调度方案
Cron表达式 1. 时间字段与基本格式 Cron表达式有6或7个空格分割的时间字段组成: 位置 时间域名 允许值 允许的特殊字符 1 秒 0-59 ,-*/ 2 分支 0-59 ,-*?/ 3 小时 ...
- promise例题
let promise = new Promise(resolve => { console.log('Promise'); resolve(); }); promise.then(functi ...
- 《网页布局基础篇》HTML+CSS单列布局--水平居中,垂直居中,水平垂直居中
https://blog.csdn.net/panlu666_pl/article/details/66480433 一.水平居中 子元素在父元素中水平居中 1.使用 text-align和inlin ...
- ubuntu中用update-alternatives进行软件多版本设置、切换,以python配置为例
以Python2.7和Python3.5设置为例: 在系统中添加Python2.7.Python3.5的选项,默认为Python3.5 sudo update-alternatives --insta ...
- tcmalloc jemalloc glibc内存分配管理模块性能测试对比
tcmalloc是谷歌提供的内存分配管理模块 jemalloc是FreeBSD提供的内存分配管理模块 glibc是Linux提供的内存分配管理模块 并发16个线程,分配压测3次,每次压15分钟,可以看 ...
- Swing常用容器
3.Swing(AWT的子类) 3.1窗口.面板 public class myJFrame extends JFrame { //JFrame是一个顶级窗口 public myJFrame() { ...
- HCNP Routing&Switching之OSPF LSA更新规则和路由汇总
前文我们了解了OSPF外部路由类型以及forwarding address字段的作用,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15225673.html: ...
- xxs攻击
1 XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中.比如这些代码包括HTML代码和客户端脚本.攻击者利用XSS漏洞旁路掉访问控制--例如 ...