判断javaScript变量是Ojbect类型还是Array类型

2021/9/26 22:11:18

本文主要是介绍判断javaScript变量是Ojbect类型还是Array类型,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

  JavaScript是弱类型的语言,所以对变量的类型并没有强制控制类型。所以声明的变量可能会成为其他类型的变量, 所以在使用中经常会去判断变量的实际类型。 对于一般的变量我们会使用typeof来判断变量类型。
  例如:在下面codesandbox中声明一个变量a,并赋值一个字符串'love you forever',然后使用typeof可以获得指定变量的类型,可以在web-preview看到结果是String类型,再次向变量a赋值数字123,则判断的类型为number,我再次向变量a赋值一个对象和一个数组,下面的web-preview结果显示却都是object,what。这是为什么?

<iframe allow="accelerometer; ambient-light-sensor; camera; encrypted-media; geolocation; gyroscope; hid; microphone; midi; payment; usb; vr; xr-spatial-tracking" sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts" src="https://codesandbox.io/embed/busy-bhaskara-70mww?fontsize=14&hidenavigation=1&theme=light&view=preview" style="width: 100%; height: 500px; border: 0; border-radius: 4px; overflow: hidden" title="busy-bhaskara-70mww"></iframe>

  所以去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执行的结果

<iframe allow="accelerometer; ambient-light-sensor; camera; encrypted-media; geolocation; gyroscope; hid; microphone; midi; payment; usb; vr; xr-spatial-tracking" sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts" src="https://codesandbox.io/embed/gracious-ritchie-rrr14?fontsize=14&hidenavigation=1&theme=light&view=preview" style="width: 100%; height: 500px; border: 0; border-radius: 4px; overflow: hidden" title="gracious-ritchie-rrr14"></iframe>

不知不觉又爬过了一个坑。编码路上没有捷径,没有代码量的积累,就没有值得飞跃。感谢各位看到这里,希望大家在不断地努力下能早日实现自己的前端梦。



这篇关于判断javaScript变量是Ojbect类型还是Array类型的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程