以下两个表达式是否等效?
BCrypt::Password.new('$2a$10$Pgxl1C8Ceg5WN5FJyP4OOOI/SiRZ0oujvWEWdNg95xp2qcPn6aP2q') == 'test1234567'
=> true
BCrypt::Password.new('$2a$10$Pgxl1C8Ceg5WN5FJyP4OOOI/SiRZ0oujvWEWdNg95xp2qcPn6aP2q')
=> "$2a$10$Pgxl1C8Ceg5WN5FJyP4OOOI/SiRZ0oujvWEWdNg95xp2qcPn6aP2q"
"$2a$10$Pgxl1C8Ceg5WN5FJyP4OOOI/SiRZ0oujvWEWdNg95xp2qcPn6aP2q" == 'test1234567'
=> false
如果没有,那么执行上述python dict查找的javasript中最接近的等效项是什么?
答案 0 :(得分:2)
否。
Python 。在Python中,如果您编写:
PLAN_TO_COST_PER_UNIT.get(planType, value_if_empty)
这意味着,如果存在planType
键,则无论该值是什么,都将返回该值。如果找不到value_if_empty
,则会返回。
例如:
>>> a = {'key': 0}
>>> a.get('key', 1425)
0
JavaScript 。您的JavaScript版本没有做到这一点:它获取键的值,并且如果不存在这样的键,则返回undefined
。然后使用||
,使得结果的“真实性”为false
时,它将采用正确的操作数(value_if_empty
)。
但是,如果您要构造一个值为0
的对象,那么它仍将使用value_if_empty
,例如:
> a = {key: 0}
{ key: 0 }
> a['key'] || 1425
1425
我认为最接近Python版本的成员资格检查:
function tryget(obj, key, missing) {
if(key in obj) {
return obj[key];
}
else {
return missing;
}
}
然后我们可以用tryget({a: 0}, 'a', 1425)
来调用它。
答案 1 :(得分:0)
您必须自己进行某种检查
一种方法是定义一个get
函数并使用
例如
function get(object, key, default_value) {
var result = object[key];
return (typeof result !== "undefined") ? result : default_value;
}