1 所有对象都是继承自Object.prototype 这个终极boss对象

犀牛书 6.10.1 (pg 142)
只能返回简单的内容,如 “[Object Object]”

2 但是好多对象都重写了toString方法

比如Number、Array、 Function 等对象

3 如果想检测数据类型,只能Object.prototype.toString.call(argData)

见犀牛书 6.8.2 (pg 139)

4 注意数字、字符串、布尔值都可直接调用toString方法,但是只能通过变量来调用

已下为vue源码检测数据类型
image.png

image.png

image.png

5 vue中用到的一些类型判断方法

  1. // These helpers produce better VM code in JS engines due to their
  2. // explicitness and function inlining.
  3. function isUndef (v) {
  4. return v === undefined || v === null
  5. }
  6. function isDef (v) {
  7. return v !== undefined && v !== null
  8. }
  9. function isTrue (v) {
  10. return v === true
  11. }
  12. function isFalse (v) {
  13. return v === false
  14. }
  15. /**
  16. * Check if value is primitive.
  17. */
  18. function isPrimitive (value) {
  19. return (
  20. typeof value === 'string' ||
  21. typeof value === 'number' ||
  22. // $flow-disable-line
  23. typeof value === 'symbol' ||
  24. typeof value === 'boolean'
  25. )
  26. }
  27. /**
  28. * Quick object check - this is primarily used to tell
  29. * Objects from primitive values when we know the value
  30. * is a JSON-compliant type.
  31. */
  32. function isObject (obj) {
  33. return obj !== null && typeof obj === 'object'
  34. }
  35. /**
  36. * Get the raw type string of a value, e.g., [object Object].
  37. */
  38. var _toString = Object.prototype.toString;
  39. function toRawType (value) {
  40. return _toString.call(value).slice(8, -1)
  41. }
  42. /**
  43. * Strict object type check. Only returns true
  44. * for plain JavaScript objects.
  45. */
  46. function isPlainObject (obj) {
  47. return _toString.call(obj) === '[object Object]'
  48. }
  49. function isRegExp (v) {
  50. return _toString.call(v) === '[object RegExp]'
  51. }
  52. /**
  53. * Check if val is a valid array index.
  54. */
  55. function isValidArrayIndex (val) {
  56. var n = parseFloat(String(val));
  57. return n >= 0 && Math.floor(n) === n && isFinite(val)
  58. }
  59. function isPromise (val) {
  60. return (
  61. isDef(val) &&
  62. typeof val.then === 'function' &&
  63. typeof val.catch === 'function'
  64. )
  65. }