1.38.0defaults
ویژگیهای undefined یک شیء را با مقادیر موجود در یک شیء منبع پر میکند.
defaults(object, source):T & Omit<U, keyof T>پارامترها
objectTالزامیشیء مقصد که ویژگیهای undefined آن باید با مقادیر پیشفرض پر شوند.
sourceUالزامیشیء منبع که شامل مقادیر پیشفرض است.
مقدار بازگشتی
T & Omit<U, keyof T>یک شیء جدید شامل ویژگیهای object را برمیگرداند که ویژگیهای undefined آن با مقادیر source پر شدهاند.
مثالها
استفاده پایه
مقادیر موجود در source جای مقادیر undefined را میگیرند.
const result = defaults(
{
name: "Alice",
age: undefined,
},
{
age: 25,
active: true,
},
);
console.log(result);
// {
// name: "Alice",
// age: 25,
// active: true
// }حفظ مقادیر موجود
یک مقدار موجود و تعریفشده با مقدار source جایگزین نمیشود.
const result = defaults(
{
name: "Alice",
age: 30,
},
{
name: "Bob",
age: 25,
},
);
console.log(result);
// {
// name: "Alice",
// age: 30
// }مقادیر undefined
فقط ویژگیهایی که مقدار فعلی آنها undefined است، مقدار source را دریافت میکنند.
const result = defaults(
{
a: undefined,
b: 0,
c: false,
d: "",
e: null,
},
{
a: 1,
b: 2,
c: true,
d: "default",
e: "value",
},
);
console.log(result);
// {
// a: 1,
// b: 0,
// c: false,
// d: "",
// e: null
// }ویژگیهای اضافی
ویژگیهایی که فقط در source وجود دارند به نتیجه اضافه میشوند.
const result = defaults(
{
name: "Alice",
},
{
age: 25,
active: true,
},
);
console.log(result);
// {
// name: "Alice",
// age: 25,
// active: true
// }مقادیر undefined در source
اگر یک ویژگی موجود در source خودش undefined باشد، همان مقدار undefined قرار میگیرد.
const result = defaults(
{
name: undefined,
},
{
name: undefined,
},
);
console.log(result.name);
// undefinedاشیای تو در تو
این تابع بهصورت shallow عمل میکند و اشیای تو در تو را merge نمیکند.
const result = defaults(
{
settings: {
theme: "dark",
},
},
{
settings: {
language: "en",
},
},
);
console.log(result);
// {
// settings: {
// theme: "dark"
// }
// }برگرداندن شیء جدید
شیء اصلی تغییر نمیکند، چون تابع ابتدا یک شیء جدید با object spread ایجاد میکند.
const original = {
name: "Alice",
age: undefined,
};
const result = defaults(original, {
age: 25,
});
console.log(result);
// { name: "Alice", age: 25 }
console.log(original.age);
// undefined
console.log(result === original);
// falseویژگیهای enumerable در source
فقط ویژگیهای own و enumerable با کلید string در source پردازش میشوند.
const source = {
age: 25,
};
Object.defineProperty(source, "hidden", {
value: true,
enumerable: false,
});
const result = defaults(
{
age: undefined,
hidden: undefined,
},
source,
);
console.log(result);
// {
// age: 25,
// hidden: undefined
// }