无法在 JS 中解构未定义错误的属性
Cannot destructure Property of Undefined Error in JS
当我们尝试从等于 的值中解构属性时,会发生“无法解构未定义的属性”错误undefined
。
要解决错误,请在解构属性时提供回退,例如
const {name} = undefined || {};
。
以下是错误发生方式的 2 个示例。
// ⛔️ Cannot destructure property 'name' of undefined as it is undefined const {name} = undefined; function test(obj) { // ⛔️ Cannot destructure property 'country' of undefined, as it is undefined const {country} = obj; } // 👇️ called function without providing object test();
我们试图
从导致错误的值中解构
属性。undefined
如果值为undefined
# ,则提供空对象的回退
要解决该错误,请在解构时提供空对象的回退,或者如果使用函数,则为参数设置默认值。
// ✅ empty object fallback const {name} = undefined || {}; console.log(name); // 👉️ undefined // ------------------------------------ // ✅ default parameter set to empty object function test(obj = {}) { const {country} = obj; console.log(country); // 👉️ undefined } test(); test(undefined);
我们使用了
逻辑或 (||)
运算符。undefined
如果左边的值是假的(例如),运算符返回右边的值。
const {name} = undefined || {}; console.log(name); // 👉️ undefined
JavaScript 中的假值是:null
, undefined
, 0
, false
, ""
(空字符串),NaN
(不是数字)。
const {name} = undefined || {}; console.log(name); // 👉️ undefined
这有助于我们避免“无法解构未定义的属性”错误。
如果您在函数中遇到错误,请使用默认对象参数
我们在第二个例子中定义了一个带有
默认参数的函数。
function test(obj = {}) { const {country} = obj; console.log(country); // 👉️ undefined } test(); test(undefined);
undefined
在调用函数时提供了值,则函数将传递默认参数值。如果您使用不等于 的参数调用该函数,undefined
则不会使用默认值。
function getEmployee(emp = {}) { console.log(emp); // 👉️ null const {name, age} = emp; console.log(name); console.log(age); } // ⛔️ TypeError: Cannot destructure property 'name' of 'emp' getEmployee(null);
您可以在解构时提供一个空对象的回退值来解决错误。
function getEmployee(emp = {}) { const {name, age} = emp || {}; console.log(name); // 👉️ undefined console.log(age); // 👉️ undefined } getEmployee(null);
如果逻辑或 (||) 运算符左侧的值为假,则使用空对象。
或者,使用可选的链接 (?.) 运算符
或者,您可以使用
可选的链接运算符 (?.)
来短路,而不是在引用为
undefined
or时抛出错误null
。
const fromDb = undefined; const name = fromDb?.name; console.log(name); // 👉️ undefined const obj = {name: 'Tom'}; const n = obj?.name; console.log(n); // 👉️ "Tom"
fromDb
变量存储一个undefined
值,所以我们短路返回
而undefined
不是抛出错误。
如果引用不是空值(null
或undefined
),则运算符返回相应的值。
您可以使用可选的链接运算符来访问深度嵌套的对象属性。
const fromDb = undefined; const floor = fromDb?.country?.address?.floor; console.log(floor); // 👉️ undefined
这种方法可以帮助我们避免在引用为空(null
或undefined
)时出现错误。
结论
当我们尝试从等于 的值中解构属性时,会发生“无法解构未定义的属性”错误undefined
。
要解决错误,请在解构属性时提供回退,例如
const {name} = undefined || {};
。