3

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:
4

1 に答える 1

5

Object.getOwnPropertyDescriptor(RegExp, "$1")についての情報を提供します$1:

クローム 30:

{ 
    get: function, 
    set: function, 
    enumerable: true, 
    configurable: false
}

Firefox 22:

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

であることに注意してconfigurableくださいfalse。したがって、プロパティを削除することはできません。また、writableisfalseの場合、値を代入できません。


このプロパティ記述子の型が変更される可能性があり、対応するオブジェクトからプロパティが削除される可能性がある場合にのみ、true を設定できます。

書き込み可能
プロパティに関連付けられた値が代入演算子で変更できる場合にのみ真です。デフォルトはfalseです。

そのため、Chrome と Firefox では、実装によりwith$1に値を削除したり割り当てたりすることができなくなります。$1=

比較のポイントとして、IE10 のレポートは少し異なります...

インターネット エクスプローラー 10:

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

とはいえ、IE10 では、プロパティを削除したり、値を割り当てたりすることはできません。図に行きます。

于 2013-08-01T13:21:33.420 に答える