为什么 JSON.stringify 没有显示完整的对象?

Why JSON.stringify does not show full object?

在本机反应中,我正在做一个控制台日志,如:

console.log(props);

我正在获取堆栈导航的完整对象导航。

但是当我这样做时:

console.log(JSON.stringify(props));

我得到导航对象未定义或为空。

附上截图

我会告诉你它不起作用的确切原因,

当你 console.log 它只是打印出它是什么,如果它是一个函数,它描述为 [Function] 。

但是 JSON.stringify 不会将函数 字符串化,因此在 this.props 中时, navigation 是一个对象,但在它里面,它存储了 function ,所以 key 是一个 stringvalue是一个函数.

检查这个:

"navigation": {"addListener": [Function addListener], "canGoBack": [Function canGoBack], "dangerouslyGetParent": [Function dangerouslyGetParent], "dangerouslyGetState": [Function anonymous], "dispatch": [Function dispatch], "goBack": [Function anonymous], "isFocused": [Function isFocused], "navigate": [Function anonymous], "pop": [Function anonymous], "popToTop": [Function anonymous], "push": [Function anonymous], "removeListener": [Function removeListener], "replace": [Function anonymous], "reset": [Function anonymous], "setOptions": [Function setOptions], "setParams": [Function anonymous]},

您可以看到键是 addListener ,但值是 [Function addListener] ,因此它是一个函数,因此是整个导航对象变为空对象。

希望它清楚。有问必答

来自 MDN

Link: JSON.stringify

JSON.stringify() 将值转换为表示它的 JSON 表示法:

  • 如果值有一个 toJSON() 方法,它负责定义哪些数据将被序列化。
  • Boolean、Number 和 String 对象被转换为 字符串化期间相应的原始值,符合 传统的转换语义。
  • 未定义、函数和符号不是有效的 JSON 值。如果在转换过程中遇到任何此类值,它们要么被省略(当在对象中找到时),要么更改为 null(当在数组中找到时)。当传入 JSON.stringify(function(){}) 或 JSON.stringify(undefined).
  • 等“纯”值时,JSON.stringify() 可以 return undefined
  • 所有以符号为键的属性将被完全忽略,即使在使用替换函数时也是如此。
  • Date 的实例通过returning 字符串实现toJSON() 函数(与date.toISOString() 相同)。因此,它们被视为字符串。
  • 数字 Infinity 和 NaN 以及值 null 都被视为 null。
  • 所有其他对象实例(包括 Map、Set、WeakMap 和 WeakSet)将仅序列化它们的可枚举属性。