Looking for Champion: Null Coalescing (??) and Null Conditional Member Access (?.) operators

Claude Pache claude.pache at gmail.com
Wed Dec 20 08:12:53 UTC 2017


There are already official proposals for those. See:

https://github.com/tc39/proposals <https://github.com/tc39/proposals>

and search for “Nullish coalescing Operator” for the first of your suggestions and “Optional Chaining” for the second one.

—Claude



> Le 20 déc. 2017 à 09:03, Arash Motamedi <arash.motamedi at gmail.com> a écrit :
> 
> I’d like to propose two new operators that I’ve appreciated using in C#, with appropriate modifications for Ecmascript. 
> 
> ?? Null-Coalescing Operator
> 
> The ?? operator is called the null-coalescing operator. It returns the left-hand operand if the operand is not null or undefined; otherwise it returns the right hand operand. (modified excerpt from C# definition, here <https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/null-conditional-operator>.)  
> 
> Examples:
>  
> let u = undefined;
> let nu = u ?? 0; 
> //  nu = (u !== undefined && u !== null) ? u : 0
> 
> let n = null;
> let nn = n ?? "Default"; 
> //  nn = (n !== undefined && n !== null) ? n : "Default";
> 
> let p = someObj.someProp ?? "Hello"; 
> //  p = (someObj.someProp !== undefined && someObj.someProp !== null) ? someObj.someProp : "Hello";
> 
> The ?? operator allows for a very terse syntactic representation of a rather common statement, and its value becomes very clear when evaluating and accessing properties on objects, as illustrated in the 3rd example above. For credit, comparison, and further details, please review the C# null coalescing operator information here <https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/null-conditional-operator>. 
> 
> 
> ?. Null Conditional Member Access and ?[ Null Conditional Index Access
> 
> Used to test for null or undefined before performing a member access (?.) or index (?[) operation. (modified excerpt from C# definition here <https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/null-conditional-operators>.) 
> 
> Examples:
>  
> let n = null;
> let nn = n?.name; 
> //  nn = (n.name <http://n.name/> !== null && u.name <http://u.name/> !== undefined) ? u.name <http://u.name/> : u.name <http://u.name/>;
> 
> let p = {name: "John"};
> let l = p.lastName?.length; 
> //  l = (u.lastName !== null && u.lastName !== undefined) ? u.lastName.length : u.lastName;
> 
> The ?. and ?[ operators allow for graceful access (as opposed to null/undefined reference errors) to object members, and are particularly useful when used in a chained manner. For credit, comparison, and further details, please review the C# null conditional member access operator information here <https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/null-conditional-operators>. 
> 
> 
> Combining the above operators can enable very concise syntax for checking against null/undefined and providing default values in a graceful manner. 
> 
> let lastNameLength = person.lastName?.length ?? 0; 
> let cityToUppercase = person.address?.city?.toUpperCase() ?? "N/A"; 
> 
> 
> Looking forward to working with the community and hopefully bringing these two operators to the language. 
> 
> Best,
> Arash
> 
> _______________________________________________
> es-discuss mailing list
> es-discuss at mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20171220/f4eb1706/attachment-0001.html>


More information about the es-discuss mailing list