Javascriptオブジェクトに自動ウイルス対策を使用するために、ネイティブまたはライブラリを使用していますか?Javascriptオブジェクトで自動ウイルス対策をサポートするライブラリはありますか?
IEの場合、foo
は、プロパティを持たないオブジェクトであり、foo.bar = {}; foo.bar.baz = 5
を必要とせずにfoo.bar.baz = 5
を実行するだけです。
Javascriptオブジェクトに自動ウイルス対策を使用するために、ネイティブまたはライブラリを使用していますか?Javascriptオブジェクトで自動ウイルス対策をサポートするライブラリはありますか?
IEの場合、foo
は、プロパティを持たないオブジェクトであり、foo.bar = {}; foo.bar.baz = 5
を必要とせずにfoo.bar.baz = 5
を実行するだけです。
あなたが望む構文で正確に行うことはできません。しかし、いつものように、JSに独自の関数を書くことができます。bar
かbaz
が定義されている場合は気にせず
// as per you example:
set(foo,['bar','baz'],5);
:
function set (obj,keys,val) {
for (var i=0;i<keys.length;i++) {
var k = keys[i];
if (typeof obj[k] == 'undefined') {
obj[k] = {};
}
obj = obj[k];
}
obj = val;
}
は今、あなたはこれを行うことができます。ファンクションコールで[..]
が好きでない場合は、いつでもarguments
オブジェクトを反復処理できます。
私はset( 'dict_obj'、[0、 'User']、5)のような辞書の値を設定しています。しかし、私は "Console.log( 'dict_obj [0] [' User '])のような呼び出しを使用して設定した値を返すことはできません。値5を返すことはできません。 – ouonomos
@ouonomos:あなたは間違っている、あなたは 'dict_obj'という文字列の代わりに' dict_obj'という文字列に値を設定しています。 – slebetman
私は誤解しました。私が実際にやっているのは:\t \t \t \t lastposxns = {}; \t \t \t \t grpname = 0; \t \t \t \t tempname = 'abc'; \t \t \t \t ypos = 5; \t \t \t dict_set(lastposxns [grp、tempname]、ypos);ここで、dict_setはautoviv関数です。しかし、console.log(lastposxns [0] ['abc'])は値5を返しません。 – ouonomos
純粋にネイティブに、私はそうは思わない。 undefined
は拡張可能でも変更可能でもなく、関数を渡さずにそれをやっていると想像できる唯一の方法です。
また、評価ベースのソリューションを使用することもできます。醜いですが、推薦されません。
function av(xpr) {
var res = "";
var pos = 0;
while (true) {
var pos = xpr.indexOf("[",pos);
if (pos == -1) break;
var frag = xpr.substr(0,pos);
pos++;
res += "if (typeof(" + frag + ") != 'object') " + frag + " = {};\n";
} // while
return res + xpr;
} // av()
function main() {
var a = {};
a["keep"] = "yep";
eval(av('a[1][1]["xx"] = "a11xx"; '));
eval(av('a[1][2]["xx"] = "a12xx"; '));
console.log(a);
} // main()
私はこれをしたいと望んでいたので、私はa package to handle itを書きました。
% npm install autovivify
% node
> Av = require('autovivify')
> foo = new Av()
{}
> foo.bar.baz = 5
5
> foo
{ bar: { baz: 5 } }
>
それも、数値の添字で配列をやる:slebetmanのコード@
> foo = new Av()
> foo.bar.baz[0] = 'hum'
> foo
{ bar: { baz: [ 'hum' ] } }
が動作するようには思えません。最後のキーには空のオブジェクトを割り当てるべきではなく、val
を割り当てます。このコードは働いた:
function autoviv(obj,keys,val) {
for (var i=0; i < keys.length; i++) {
var k = keys[i];
if (typeof obj[k] === 'undefined') {
if(i === keys.length-1) {
obj[k] = val;
return;
}
obj[k] = {};
}
obj = obj[k];
}
}
foo = {}
autoviv(foo,['bar','baz'],5);
console.log(foo.bar.baz);
5
こんにちはマーク、疑問があります。角度jを使ってスクリーンショットをキャプチャする良い方法はありますか?はい、これを確認してください。https://stackoverflow.com/questions/44602309/making-a-スクリーンを使用した適切な画像取得jquery –
純粋にネイティブに、私はそう思わない。 'undefined'は拡張可能でも変更可能でもなく、関数を渡さずに行うことができる唯一の方法です。 – Snuffleupagus
いいえhttp://stackoverflow.com/questions/7691395/autovivification-and-javascript – lbstr
@Ibstr、その質問は、自動ウイルス対策とJavaScriptを参照しながら、同じことを私に尋ねていません。 –