Javascript 如何检查是否存在敲除观察值?
假设我有一个可观察的json:Javascript 如何检查是否存在敲除观察值?,javascript,knockout.js,Javascript,Knockout.js,假设我有一个可观察的json: self.name = ko.observable('Arnab'); self.surname= ko.observale('Bhagabati') var person = { name:ko.observable('Arnab'), lastName= ko.observale('Bhagabati') } 我可以通过console.log(person.name())访问人名 我如何检查我的人是否有一个名为薪水的可忽略的可观察属性 if (ty
self.name = ko.observable('Arnab');
self.surname= ko.observale('Bhagabati')
var person = {
name:ko.observable('Arnab'),
lastName= ko.observale('Bhagabati')
}
我可以通过console.log(person.name())访问人名代码>
我如何检查我的人
是否有一个名为薪水
的可忽略的可观察属性
if (typeof person.salary() !== 'undefined')
给出参数。工资不是以下代码中的函数,=代码>检查null
和未定义的:
if (person.salary != null) {
// ...
}
在下面的代码中,=代码>检查null
和未定义的:
if (person.salary != null) {
// ...
}
可观测的是函数。如果没有salary
属性,person.salary()
将抛出异常
因此,您可以使用:
if (typeof ko.unwrap(person.salary) !== 'undefined')
{
}
unwrap
返回属性的值,无论其是否可见
有关更多信息,请参阅。观测值是函数。如果没有salary
属性,person.salary()
将抛出异常
var val = ko.unwrap(person.salary);
因此,您可以使用:
if (typeof ko.unwrap(person.salary) !== 'undefined')
{
}
unwrap
返回属性的值,无论其是否可见
有关更多信息,请参阅
var val = ko.unwrap(person.salary);
及
无论<代码>人员。工资是否可见,都将工作
及
无论<代码>人员。工资是否可见,都将工作
我如何检查我的人是否有一个可忽略的可观察属性,比如工资
(强调矿山)
如果像其他答案所建议的那样,按照If(ko.unwrap(person.salary))
行进行检查,那么基本上就是检查是否存在已定义的salary
属性
即:
对于typeof ko.unwrap(person.salary)==“undefined”
如果我照字面理解你写的,这并不能回答“person”对象是否有一个称为salary
的可观察属性
要回答此问题,您需要ko.isObservable
:
var个人=[
[{ }, "{ }"],
[{salary:undefined},“{salary:undefined}”,
[{salary:ko.observable()},“{salary:ko.observable()”]
]
var check1=人员=>ko.unwrap的类型(人员工资)==“未定义”;
var check2=个人=>ko.isObservable(个人工资);
log(check1.toString());
persons.forEach(([p,c])=>console.log(c,“->”,check1(p));
log(check2.toString());
persons.forEach(([p,c])=>console.log(c,“->”,check2(p));
我如何检查我的人是否有一个可忽略的可观察属性,比如工资
(强调矿山)
如果像其他答案所建议的那样,按照If(ko.unwrap(person.salary))
行进行检查,那么基本上就是检查是否存在已定义的salary
属性
即:
对于typeof ko.unwrap(person.salary)==“undefined”
如果我照字面理解你写的,这并不能回答“person”对象是否有一个称为salary
的可观察属性
要回答此问题,您需要ko.isObservable
:
var个人=[
[{ }, "{ }"],
[{salary:undefined},“{salary:undefined}”,
[{salary:ko.observable()},“{salary:ko.observable()”]
]
var check1=人员=>ko.unwrap的类型(人员工资)==“未定义”;
var check2=个人=>ko.isObservable(个人工资);
log(check1.toString());
persons.forEach(([p,c])=>console.log(c,“->”,check1(p));
log(check2.toString());
persons.forEach(([p,c])=>console.log(c,“->”,check2(p));
如果您想要快速解决方案,只需查看对象类型是否为函数,然后添加一些检查,以确定其中是否存在敲除特定的函数。这对于在ko.computed中使用非常方便,当您非常确定可观察对象将在那里,但还没有
var isKoObservable = function(obs) {
var retVal = false;
if (typeof obs === "function") {
if (typeof obs.subscribe === "function" && typeof obs.notifySubscribers === "function") {
// its HIGHLY likely to be an observable or observableArray
retVal = true;
}
}
return retVal;
}
有关详细信息,请参见此答案:
如果您想要快速解决方案,只需查看对象类型是否为函数,然后添加一些检查,以确定其中是否存在敲除特定的函数。这对于在ko.computed中使用非常方便,因为您非常确定可观察对象将在那里,但还没有
var isKoObservable = function(obs) {
var retVal = false;
if (typeof obs === "function") {
if (typeof obs.subscribe === "function" && typeof obs.notifySubscribers === "function") {
// its HIGHLY likely to be an observable or observableArray
retVal = true;
}
}
return retVal;
}
有关详细信息,请参见此答案: