Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 未捕获的TypeError:在object.defineProperty()期间,属性描述必须是object:c_Javascript - Fatal编程技术网

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;
                            }
                        }) (),
                    }});
                };