在Javascript中进行空融合?

Ala*_*lan 36 javascript

在C#中,您可以执行以下操作:

string y = null;
string x = y ?? "sup stallion"; //x = "sup stallion" since y is null.
Run Code Online (Sandbox Code Playgroud)

其中??运算符是空合并运算符.

在Javascript中,我见过类似的东西:

var headers;
var myHeader = headers || {'Content-type':'text/plain'}; //myHeaders = {'Content...
Run Code Online (Sandbox Code Playgroud)

我也看到了:(页面上的第二个代码片段)

var headers;
var myHeader = headers | {'Content-type':'text/plain'};
Run Code Online (Sandbox Code Playgroud)

这两者有区别吗?这个模式叫什么...默认参数?

Ben*_*Lee 36

||合乎逻辑的还是.它返回第一个真值操作数*(评估的最后一个值).所以

var myHeader = headers || {'Content-type':'text/plain'};
Run Code Online (Sandbox Code Playgroud)

如果它是真实的,则返回"标题"(如果它为null或未定义,则该值被核心化为"false").如果它是假的,它返回第二个操作数.我不相信这在javascript中有一个非常具体的名称,只是像"默认参数值"这样的通用名称.

|是一个按位或.这是一个数学运算,做了一些完全不同的事情.那个运算符在这里甚至没有意义(并且通常只会产生0结果).无论你在哪里看到它,它肯定是一个错字,他们意味着使用逻辑或.

所以请使用第一种方法(a = b || c).

*"逻辑或"也称为"逻辑分离"或"包含分离".与所有编程语言一样,Javascript使用短路评估来评估逻辑语句.使用逻辑或表达式,它会评估每个操作数的真实性,并在第一个真实的操作数上停止(并返回该值).如果没有真正的操作数,它仍然必须遍历所有操作数,因此它返回最后一个操作数,仍然是它评估的最后一个操作数.逻辑和(&&)同样通过停在第一个假操作数上而短路.


Sey*_*don 5

javascript (es2020) 现在支持空合并运算符

正如 Mozilla 文档所说:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Nullish_coalescing_operator

空合并运算符 (??) 是一个逻辑运算符,当其左侧操作数为空或未定义时,它返回其右侧操作数,否则返回其左侧操作数。

与逻辑 OR (||) 运算符相反,如果左操作数是非 null 或未定义的假值,则返回左操作数。换句话说,如果你使用 || 要为另一个变量 foo 提供一些默认值,如果您认为某些虚假值可用(例如“”或 0),则可能会遇到意外行为。请参阅下文了解更多示例。

// Assigning a default value to a variable (old way but in some cases we need this)
let count = 0;
let text = "";
let qty = count || 42;
let message = text || "hi!";
console.log(qty);     // 42 and not 0
console.log(message); // "hi!" and not ""

// Assign default value when we want to skip undefined/null only
// in most cases we need this, because (0,"",false) are valid values to our programs
const foo = null ?? 'default string';
console.log(foo);
// expected output: "default string"

const baz = 0 ?? 42;
console.log(baz);
// expected output: 0
Run Code Online (Sandbox Code Playgroud)

fallback to default value有关更多信息,请阅读 kent c dods 提供的有关过去和现在的 示例:https: //kentcdodds.com/blog/javascript-to-know-for-react#nullish-coalescing-operator