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类型的更多相关文章

  1. 《JavaScript高级程序设计》读书笔记 ---Array 类型

    除了Object 之外,Array 类型恐怕是ECMAScript 中最常用的类型了.而且,ECMAScript 中的数组与其他多数语言中的数组有着相当大的区别.虽然ECMAScript 数组与其他语 ...

  2. JavaScript系统学习小结——Object类型、Array类型

    今天学习JavaSript中引用变量中的Object类型和Array类型: 1. Js中大多数引用类型值都是Object类型的实例,Object类型在应用程序中存储和传输数据时,是非常理想的选择: 创 ...

  3. 引用类型--Object类型、Array类型

    引用类型的值(对象)是引用类型的一个实例.在ECMAScript中,引用类型是一种数据结构,它描述的是一类对象具有的属性和方法. 对象是某个特定引用类型的实例,新对象是使用new操作符后跟一个构造函数 ...

  4. Object类型与Array类型

    总结--JS中的引用类型: Object类型,Array类型,Boolean类型,Number类型,String类型,Date类型, Function类型,RegExp类型,单体内置对象(Global ...

  5. 判断Javascript变量是否为空 undefined 或者null(附样例)

    1.变量申明未赋值 var type; //type 变量未赋值 1. type==undefined //true 2. type===undefined //true 3. typeof(type ...

  6. Javascript高级程序设计--读书笔记之Array类型

    1.数组的lenght属性 数组的lenght属性很有特点---他不是只读的,可以同过修改这个属性来向数组的末尾添值加或删除值, 删除值 var color = ["red", & ...

  7. object类型转换为Array类型

    var obj = {a: 1, b: 2, c: 3}; // .... var arr = []; for(var key in obj){ if(!obj.hasOwnProperty(key) ...

  8. JavaScript 变量、类型与计算

    变量类型 变量计算 变量 题目: JavaScript 中使用typeof能得到的有哪些类型? ``` 1.1 变量类型 (1).js中的数据类型:字符串.数字.布尔.数组.对象.Null.Undef ...

  9. 第一百零六节,JavaScript变量作用域及内存

    JavaScript变量作用域及内存 学习要点: 1.变量及作用域 2.内存问题 JavaScript的变量与其他语言的变量有很大区别.JavaScript变量是松散型的(不强制类型)本质,决定了它只 ...

随机推荐

  1. Intellj IDEA 光标显示insert状态解决办法

    使用idea过程中,不知道怎么回事,鼠标的光标老是insert状态,体验效果极其差劲,于是去百度,扒拉了好一阵,过滤了垃圾博客,发现了有两种方法可以解决此问题: 第一种方法: 在File------& ...

  2. @ControllerAdvice注解(全局异常捕获)

    背景 @ControllerAdvice 注解 通常用于定义@ExceptionHandler, @InitBinder和@ModelAttribute 适用于所有@RequestMapping方法的 ...

  3. swiper在一个页面多个轮播图

    <script> var swiper = new Swiper('.swiper-container1', { spaceBetween: 30, centeredSlides: tru ...

  4. Dos 获取网络的命令

    Netsh mbn 命令 https://docs.microsoft.com/zh-cn/windows-server/networking/technologies/netsh/netsh-mbn ...

  5. C++程序调试方式总结

    bug调试要根据应用场景和条件,选择什么样子的调试方式很大程度上不是你想选择什么样的调试方式,而是还剩下什么样子的调试方式可用.下面就根据不同的场景和条件来总结一下. 目录: 1.gdb调试或者IDE ...

  6. SpringBoot五步配置Mybatis

    第一步:Maven里面添加mybatis的引用jar包: <!--mybatis--> <dependency> <groupId>org.mybatis.spri ...

  7. 在localStorage中存储对象数组并读取

    频繁ajax请求导致页面响应变慢. 于是考虑将数据存储在window.storage中,这样只请求一次ajax,而不需要频繁请求. 鉴于localstorage中只能存储字符串,所以我们要借助于JSO ...

  8. Ansible基础使用

    原文转自:https://www.cnblogs.com/itzgr/p/10233932.html作者:木二 目录 一 Ansible命令用法 1.1 免密钥 1.2 Ad-Hoc基础命令 1.3 ...

  9. Git使用教程五

    基于ssh协议(推荐) 该方式与前面https方式相比,只是影响github对于用户的身份鉴权方式,对于git的具体操作(如提交本地.添加注释.提交远程等操作)没有任何影响.   生成公私钥对指令(需 ...

  10. Linux核心知识

    电脑:辅助人脑的工具 现在的人们几乎无时无刻都会碰电脑!不管是桌上型电脑(桌机).笔记型电脑(笔电).平板电脑.智慧型手机等等,这些东西都算是电脑.虽然接触的这么多,但是,你了解电脑里面的元件有什么吗 ...