Javascript 未捕获的TypeError:在object.defineProperty()期间,属性描述必须是object:c
我想在每个浏览器[浏览器]中添加“兼容性”属性:Javascript 未捕获的TypeError:在object.defineProperty()期间,属性描述必须是object:c,javascript,Javascript,我想在每个浏览器[浏览器]中添加“兼容性”属性: const browsers = { 'android': { regex: /Android\s\d{1,2}/, version: '4.4', }, 'safari': { regex: /(?:Mac|
const browsers = {
'android': {
regex: /Android\s\d{1,2}/,
version: '4.4',
},
'safari': {
regex: /(?:Mac|iPhone)(?:.*Version\/)(\d{1,2})/,
version: 9,
},
'chrome': {
regex: /(?<=Chrome\/)\d{1,2}|(?<=CriOS\/)\d{1,2}/,
version: 45,
},
'firefox': {
regex: /(?<=Firefox\/)\d{1,2}|(?<=FxiOS\/)d\{1,2}/,
version: 38,
},
'opera': {
regex: /(?<=OPR\/)\d{1,2}/,
version: 30,
},
};
但它抛出了一个错误:
Uncaught TypeError: Property description must be an object: c
控制台显示在执行defineProperty()时以及在jQuery中引发此错误,我查过了,但没什么帮助
我想知道为什么会发生这种情况,以及‘object:c’是什么意思。谢谢 您遇到的错误抱怨的是第二个参数,而不是第三个参数 您正在调用
defineProperties
,它只需要两个参数,其中第二个参数必须是普通对象。但您使用defineProperty
所需的签名来调用它。您似乎混淆了这两个方法,因为您将继续编写“…当defineProperty()被执行时”
因此,将该调用更改为defineProperty
(单数)。尝试如下操作
for (let browser in browsers) {
Object.defineProperties(browsers[browser], {compatibility: { // Error at this line
writable: true,
configurable: true,
enumerable: false,
value: (() => {
if (browser === 'safari') {
try {
return getVersion.match([browser].regex)[1] >= [browser].version;
} catch {
return false;
}
} else {
return getVersion.match([browser].regex) >= [browser].version;
}
}) (),
}});
};
我不明白你想在这里“添加”什么。为什么在第二段代码中有问号?这是一个语法错误。@Quasimodo'sclone'?“是指我通过defineProperty()添加的内容,您没有按您的意思使用
Object.defineProperty
。您编写了Object.defineProperties
,当使用属性名和单个描述符调用该属性时,该属性不起作用。@Bergi Ye我收到了这个输入错误thx!是的,你是对的。我讨厌vscode自动填充…非常感谢!
Uncaught TypeError: Property description must be an object: c
for (let browser in browsers) {
Object.defineProperties(browsers[browser], {compatibility: { // Error at this line
writable: true,
configurable: true,
enumerable: false,
value: (() => {
if (browser === 'safari') {
try {
return getVersion.match([browser].regex)[1] >= [browser].version;
} catch {
return false;
}
} else {
return getVersion.match([browser].regex) >= [browser].version;
}
}) (),
}});
};