任何人都知道为什么RegExp。$ 1-x变量不能设置为undefined?
以下nodejs中的示例。 chrome / firefox中的行为相同:
console.log('1:', RegExp.$1, RegExp.$2, RegExp.$3, RegExp.$4);
// 1: / Users/tiefenma/Desktop/ test.js .js
var string = 'test1 test2 test3';
var test = string.match(/(test1).*(test2).*(test3)/gm);
console.log('2:', RegExp.$1, RegExp.$2, RegExp.$3, RegExp.$4);
// 2: test1, test2, test3
RegExp.$1 = undefined;
RegExp.$2 = undefined;
RegExp.$3 = undefined;
console.log('3:', RegExp.$1, RegExp.$2, RegExp.$3, RegExp.$4);
// 3: test1, test2, test3
delete RegExp.$1;
delete RegExp.$2;
delete RegExp.$3;
console.log('4:', RegExp.$1, RegExp.$2, RegExp.$3, RegExp.$4);
// 4: test1, test2, test3
''.match(/(.*)/g);
console.log('5:', RegExp.$1, RegExp.$2, RegExp.$3, RegExp.$4);
// 5:
答案 0 :(得分:5)
Object.getOwnPropertyDescriptor(RegExp, "$1")
会为您提供有关$1
:
Chrome 30:
{ get: function, set: function, enumerable: true, configurable: false }
Firefox 22:
{ configurable: false, enumerable: true, value: "", writable: false }
请注意,configurable
为false
;所以,你不能删除该属性。此外,当writable
为false
时,您无法指定值。
<强>配置强>
当且仅当此属性描述符的类型为true时才为true 如果财产可能被删除,可能会被更改 相应的对象。
的可写强>
当且仅当与属性关联的值时才为真 可以使用赋值运算符更改。 默认为false
。
因此,在Chrome和Firefox中,该实施会阻止您删除$1
或使用$1
将值分配给=
。
作为比较点,IE10报告的内容有点不同......
Internet Explorer 10:
{ value: "", writable: true, enumerable: false, configurable: true }
也就是说,IE10仍然不会让你删除属性或为它赋值。去图。