Javascript表現における連続的な和𞓜の割当値の違い
3822 ワード
コードは以下の通りです
'&''の出力については:
‘?124;’の出力については、
複数の連続した&&&の表現に0、false、undefined、nullがない場合、最後の「サブ表現」の値を取得します.そうでなければ、表式の0、false、undefined、nullを返します.
複数の連続する|?の表現は、最初の「サブ表現」の値をとります.0、false、undefined、nullのうちの一つであれば、「サブ表現」の値を取って、0ではないfalse、undefined、nullの「サブ表現」を見つけて、それを全体の表現の値にします.
追加:
上には考えられないようですが、「」というサブ表現があります.どうすればいいですか?実際には、もう一つの表現方法を変えて、& と124の働き方を説明することができます.
に対して/(…)/……………………………….
左から右へ各サブ表現を遍歴し、各サブ表現をBooleanの強制変換し、Boolean(サブ表現)がfalseである場合、このサブ表現の値はこのサブ表現の値(0またはfalseまたはundefinedまたはnullまたは')であり、後のサブ表現は判断しない.すべてのBoolean(サブ表現)がtrueである場合、式全体の値は最後のサブ表現の値となります.
に対して…
左から右へ各サブ表現を遍歴し、各サブ表現をBooleanの強制変換を行い、Boolean(サブ表現)がtrueである場合、このサブ表現の値は、このサブ表現の値であり、後のサブ表現は無視されます.Boolean(サブ表現)がfalseであれば、Boolean(サブ表現)がtrueであることが判明するまで、後のサブ表現のBooleanを判断する.すべてのBoolean(サブ表現)がfalseである場合、最後のサブ表現の値(0またはfalseまたはundefinedまたはnullまたは')を返します.
ここで注意します
Boolean(false)Boolean('false')は前者がfalseで、後者がtrueです.
Boolean(undefined)!=Boolean('undefined')は前者がfalseで、後者がtrueです.
Boolean(null)Boolean('null')は前者がfalseで、後者がtrueです.
Boolean(0)!=Boolean('0')は前者がfalseで、後者がtrueです.
Boolean(')==false
function write(msg){
for(var i = 0; i < arguments.length; i ++){
document.write(arguments[i] + '
');
}
}
// '&&'
test1 = 1 && 2 && 3 && 4;
test2 = '0' && 2 && 3 && 4;
test3 = 1 && 2 && 0 && 4;
test4 = 2 && 'i' && 'love' && 3 && 'you';
test5 = 'i' && 'hate' && 1 && 0 && 'you';
test6 = 1 && false && 'ihateyou' && '2';
test7 = 2 && true && 'ihatehateyou' && '23';
test8 = 4 && true && 'undefined' && 'true' && '1';
test9 = 4 && true && undefined && 'true' && '1';
test10 = 4 && true && 'null' && 'true' && '1';
test11 = 4 && true && null && 'true' && '1';
write(test1, test2, test3, test4, test5, test6, test7, test8, test9, test10, test11);
write('----------------------------------------------');
// '||'
_test1 = 1 || 2 || 3 || 4;
_test2 = 0 || 2 || 3 || 4;
_test3 = 0 || '0' || 8 || 4;
_test4 = 2 || 'i' || 'love' || 0 || 'you';
_test5 = 0 || 'hate' || 1 || 0 || 'you';
_test6 = false || 0 || 'ihateyou' || '2';
_test7 = false || true || 'ihatehateyou' || '23';
_test8 = 0 || 0 || 'undefined' || 'true' || '1';
_test9 = 0 || 0|| undefined || 'true' || '1';
_test10 = 0 || false || 'null' || 'true' || '1';
_test11 = 0 || 0 || null || 'true' || '1';
write(_test1, _test2, _test3, _test4, _test5, _test6, _test7, _test8, _test9, _test10, _test11);
出力結果を見に来たら分かります.'&''の出力については:
4
4
0
you
0
false
23
1
undefined
1
null
各行の番号は上の各testに対応します.‘?124;’の出力については、
1
2
0
2
hate
ihateyou
true
undefined
true
null
true
よく照らし合わせて見れば分かります.複数の連続した&&&の表現に0、false、undefined、nullがない場合、最後の「サブ表現」の値を取得します.そうでなければ、表式の0、false、undefined、nullを返します.
複数の連続する|?の表現は、最初の「サブ表現」の値をとります.0、false、undefined、nullのうちの一つであれば、「サブ表現」の値を取って、0ではないfalse、undefined、nullの「サブ表現」を見つけて、それを全体の表現の値にします.
追加:
上には考えられないようですが、「」というサブ表現があります.どうすればいいですか?実際には、もう一つの表現方法を変えて、& と124の働き方を説明することができます.
に対して/(…)/……………………………….
左から右へ各サブ表現を遍歴し、各サブ表現をBooleanの強制変換し、Boolean(サブ表現)がfalseである場合、このサブ表現の値はこのサブ表現の値(0またはfalseまたはundefinedまたはnullまたは')であり、後のサブ表現は判断しない.すべてのBoolean(サブ表現)がtrueである場合、式全体の値は最後のサブ表現の値となります.
に対して…
左から右へ各サブ表現を遍歴し、各サブ表現をBooleanの強制変換を行い、Boolean(サブ表現)がtrueである場合、このサブ表現の値は、このサブ表現の値であり、後のサブ表現は無視されます.Boolean(サブ表現)がfalseであれば、Boolean(サブ表現)がtrueであることが判明するまで、後のサブ表現のBooleanを判断する.すべてのBoolean(サブ表現)がfalseである場合、最後のサブ表現の値(0またはfalseまたはundefinedまたはnullまたは')を返します.
ここで注意します
Boolean(false)Boolean('false')は前者がfalseで、後者がtrueです.
Boolean(undefined)!=Boolean('undefined')は前者がfalseで、後者がtrueです.
Boolean(null)Boolean('null')は前者がfalseで、後者がtrueです.
Boolean(0)!=Boolean('0')は前者がfalseで、後者がtrueです.
Boolean(')==false