相关疑难解决方法(0)

使用变量动态访问对象属性

我正在尝试使用动态名称访问对象的属性.这可能吗?

const something = { bar: "Foobar!" };
const foo = 'bar';
something.foo; // The idea is to access something.bar, getting "Foobar!"
Run Code Online (Sandbox Code Playgroud)

javascript properties object

654
推荐指数
10
解决办法
31万
查看次数

JavaScript对象:按名称访问变量属性为字符串

如果我有一个如下所示的javascript对象

var columns = {
  left: true,
  center : false,
  right : false
}
Run Code Online (Sandbox Code Playgroud)

我有一个传递对象的函数,以及一个像这样的属性名称

//should return false
var side = read_prop(columns, 'right');
Run Code Online (Sandbox Code Playgroud)

身体read_prop(object, property)会是什么样的?

javascript object

368
推荐指数
3
解决办法
38万
查看次数

在javascript中双重否定(!!) - 目的是什么?

可能重复:
什么是!! (不是)JavaScript中的运算符?

我遇到过这段代码

function printStackTrace(options) {
    options = options || {guess: true};
    var ex = options.e || null, guess = !!options.guess;
    var p = new printStackTrace.implementation(), result = p.run(ex);
    return (guess) ? p.guessAnonymousFunctions(result) : result;
}
Run Code Online (Sandbox Code Playgroud)

并不禁想知道为什么双重否定?是否有另一种方法可以达到同样的效果?

(代码来自https://github.com/eriwen/javascript-stacktrace/blob/master/stacktrace.js)

javascript

116
推荐指数
3
解决办法
5万
查看次数

JavaScript对象检测:点语法与'in'关键字

我已经看到了两种检测UA是否实现特定JS属性的方法:if(object.property)if('property' in object).

我想听听哪些更好,更重要的是为什么的意见.一个明显优于另一个吗?是否有不仅仅是这两种方法来进行对象属性检测?请涵盖浏览器支持,陷阱,执行速度等,而不是美学.

编辑: 鼓励读者在jsperf.com/object-detection上运行测试

javascript properties

63
推荐指数
2
解决办法
2万
查看次数

对象没有hasOwnProperty方法(即它是未定义的) - IE8

这看起来很奇怪.

这是我在IE8控制台中的实验:

typeof obj1 // "object"
obj1.hasOwnProperty // {...}

typeof obj2 // "object"
obj2.hasOwnProperty // undefined
Run Code Online (Sandbox Code Playgroud)

关于什么可能导致这个问题的任何想法?

javascript internet-explorer-8 ie-developer-tools hasownproperty

27
推荐指数
1
解决办法
2万
查看次数

如何检查可能未定义的对象上是否存在属性?

所以在SO上有一些问题可以解答如何检查对象上的属性是否存在.示例答案是使用Object.prototype.hasOwnProperty().

但是,如何检查可能未定义的对象的属性?

如果要尝试直接检查未定义对象上是否存在属性,那么它将是一个引用错误.

在语义上,直接检查代码似乎更好if (obj.prop) //dosomething- 它显示更清晰的意图.有没有办法实现这个目标?优选地,是否有内置的Javascript方法来执行此类操作或按照惯例?

Motive:一个包添加了属性user.session.email - 但我正在检查是否存在电子邮件,而不是会话,尽管会话可能不存在.

更新:许多答案都说使用&&运算符进行短路.我知道这是一个可能的解决方案,但它并不完全是所期望的,因为我们似乎正在使用JS对象语法 - 也就是说,虽然你想真正检查一个对象的属性,你被迫检查对象是否存在以便这样做.

注意标记为已关闭为什么标记为已关闭?假设这是重复的链接可能不会产生相同的答案.我们正在寻找一种更好的,更具语义性的解决方案,并且标记这种封闭使得"嵌套"==="可能未定义"的假设.

这个问题是有争议的: 因为我现在无法回答我自己的问题.截至最近,这里提出了一项提案,可以解决这个问题.同样,问题需要一个更具语义性的解决方案,如提案中所示.

javascript object

22
推荐指数
2
解决办法
3万
查看次数

2
推荐指数
2
解决办法
1909
查看次数

Javascript in check vs dot notation check

根据这个答案,我知道我可以使用in运算符检查属性是否存在.所以我在很多代码中看到它常用,例如:

if ("gapi" in window) {
    gapi.login(...);
}
Run Code Online (Sandbox Code Playgroud)

但这样做会不会更好?

if (window.gapi) {
    gapi.login(...);
}
Run Code Online (Sandbox Code Playgroud)

我所知道的唯一的区别是,如果变量存在,但它的价值是第二个将返回false undefined,false,0,null计算结果为假或其他价值; 并且第一个将返回true,对吗?

那么,还有其他区别吗?我应该使用哪一个?

javascript variables object

1
推荐指数
1
解决办法
58
查看次数