如果我有一个对象的引用:
var test = {};
Run Code Online (Sandbox Code Playgroud)
可能(但不是立即)有嵌套对象,如:
{level1: {level2: {level3: "level3"}}};
Run Code Online (Sandbox Code Playgroud)
在最深层嵌套的对象中测试密钥是否存在的最佳方法是什么?
alert(test.level1);收益率undefined,但alert(test.level1.level2.level3);失败了.
我现在正在做这样的事情:
if(test.level1 && test.level1.level2 && test.level1.level2.level3) {
alert(test.level1.level2.level3);
}
Run Code Online (Sandbox Code Playgroud)
但我想知道是否有更好的方法.
在PHP中你可以做到if(isset($array['foo'])) { ... }.在JavaScript中,您经常使用if(array.foo) { ... }相同的方法,但这不是完全相同的语句.如果array.foo确实存在,条件也将评估为false,但是false或者0(也可能是其他值).
issetJavaScript 中PHP的完美等价物是什么?
从更广泛的意义上讲,JavaScript处理不存在的变量,没有值的变量等的一般完整指南会很方便.
是否有一个null-safe属性访问(空传播/存在)操作者在ES6(ES2015/JavaScript.next /和谐)等?.中的CoffeeScript例如?或者是否计划用于ES7?
var aThing = getSomething()
...
aThing = possiblyNull?.thing
Run Code Online (Sandbox Code Playgroud)
这将大致如下:
if (possiblyNull != null) aThing = possiblyNull.thing
Run Code Online (Sandbox Code Playgroud)
理想情况下,解决方案不应该分配(甚至undefined)到aThing如果possiblyNull是null
这是一系列关于JavaScript中语法的问题.这也是社区Wiki,因此邀请每个人参与维护此列表.
Stack Overflow不允许搜索特定字符.因此,在搜索运算符和其他语法标记时,很难找到许多关于运算符和其他语法标记的问题.这也使得关闭重复更加困难.以下列表是为了解决此问题.
主要思想是在Stack Overflow上链接现有问题,因此我们更容易引用它们,而不是复制ECMAScript规范中的内容.
此外,这是PHP符号引用的公然副本.我们需要一个JS.
请帮忙.编辑并添加指向其他运算符/语法参考的链接,或者如果您无法在特定语法上找到好的问题/答案,请添加此问题的答案并将其链接
我知道React 中的三元运算符是什么。
当我开发 React Native 应用程序时,我遇到了这种被我的 eslint 作为意外标记覆盖的语法
ESLint: Parsing error: Unexpected token .
它是这样的:
const routeName = route.state?.routes[route.state.index]?.name ?? INITIAL_ROUTE_NAME;
这意味着什么?它最终使用空合并运算符,但是我无法理解问号在点之前的作用。
我知道这是一种正确的语法,因为它是expo的模板,并且它们在 react-native 开发社区中非常受欢迎。
谁能帮我解释一下?
CoffeeScript变成user?.id了
if (typeof user !== "undefined" && user !== null) {
user.id;
}
Run Code Online (Sandbox Code Playgroud)
是否可以创建一个exists类似的JavaScript函数?即
exists(user).id
Run Code Online (Sandbox Code Playgroud)
会导致任何一个user.id或null
如果一个函数接受另一个参数会更容易exists(user, 'id'),但是看起来不那么好.
我在代码条件行中遇到了这样的情况someObject.arrParam?.length。那是什么语法?这个问号的东西怎么称呼?我知道一个可选运算符,用于函数中的参数。这是它的用法的变体吗?以前从未见过面。
假设我有一个JavaScript对象:
var obj = {};
obj.computers = {};
obj.computers.favorite = "Commodore 64";
obj.computers.popular = "Apple";
Run Code Online (Sandbox Code Playgroud)
现在,我可以轻松检查null,如:
if(obj != 'undefined' && obj != null) {
if(obj.computers != 'undefined' && obj.computers != null)) {
.....
Run Code Online (Sandbox Code Playgroud)
如您所见,如果我需要查看是否obj.computers.favorite已设置,我必须在那里嵌套一些条件逻辑.我们的一些物体深入3,4,5级.
这是我希望能够做到的:
var fav = obj.computers.favorite || 'Unknown';
Run Code Online (Sandbox Code Playgroud)
但我意识到我需要用某种方法包装它.就像是:
var fav = getValueOrDefault(obj.computers.favorite, 'Unknown');
Run Code Online (Sandbox Code Playgroud)
建议表示赞赏.
谢谢
编辑
我检查'undefined'实际上并不是我使用的.在提出这个问题时,我只是想到了.大声笑
但我想知道,如果异常,我可以在try/catch中包装并抛出默认值吗?
function(obj, default) {
try {
if(obj != null) {
return obj;
} else {
return default;
}
} catch(ex) {
return default;
}
}
Run Code Online (Sandbox Code Playgroud)
此外,感谢Shusi指出冗余的变量.
我主要使用 React 并且经常发现,当我编写一个依赖于组件状态的函数时,我必须在执行任何操作之前执行检查以查看该状态是否已定义。
例如:我有一个函数,用于.map()遍历从数据库中获取的对象数组,并为数组中的每个对象生成 jsx。这个函数是在render()我的组件的函数中调用的。第一次render()调用,初始数组为空。这会导致错误,因为当然,数组的第一个索引未定义。
我一直在通过进行条件检查以查看数组的值是否未定义来规避这一点。每次编写 if 语句的过程都感觉有点笨拙,我想知道是否有更好的方法来执行此检查或完全避免它的方法。
我在 NgRx 工作,收到此错误:
“预期有一个赋值或函数调用,但看到的是一个表达式。”
中的声纳问题this.sfForm.get('code')?.[this._mode ? 'disable' : 'enable']();。
我不明白来自声纳的消息,也不明白这里要解决什么问题。我需要一些帮助来理解代码并解决问题。
<mat-form-field [formGroup]="sfForm">
<input Input
matInput
(keydown.enter)="search($event.target.value)"
[type]="''"
formControlName="code"
required>
</mat-form-field>
Run Code Online (Sandbox Code Playgroud)
sfForm: FormGroup;
private _mode: boolean = true;
public set scanMode(value: boolean) {
this._mode = value;
this.sfForm.get('code')?.[this._mode ? 'disable' : 'enable']();
}
Run Code Online (Sandbox Code Playgroud) javascript ×8
coffeescript ×2
reactjs ×2
angular ×1
babeljs ×1
ecmascript-6 ×1
isnull ×1
isset ×1
nested ×1
ngrx ×1
object ×1
properties ×1
react-native ×1
typescript ×1