无法在JavaScript中删除RegExp。$ 1

时间:2013-08-01 13:10:52

标签: javascript regex node.js

任何人都知道为什么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:

1 个答案:

答案 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
}

请注意,configurablefalse;所以,你不能删除该属性。此外,当writablefalse时,您无法指定值。

  

<强>配置
  当且仅当此属性描述符的类型为true时才为true   如果财产可能被删除,可能会被更改   相应的对象。

  的可写
  当且仅当与属性关联的值时才为真   可以使用赋值运算符更改。 默认为false

因此,在Chrome和Firefox中,该实施会阻止您删除$1或使用$1将值分配给=

作为比较点,IE10报告的内容有点不同......

  

Internet Explorer 10:

{
    value: "",
    writable: true,
    enumerable: false,
    configurable: true
}

也就是说,IE10仍然不会让你删除属性或为它赋值。去图。