JavaScriptの最終面の試験問題:null==undefined、[]+{}、{}などの結果はいくらですか?全部見てから、奇経八脈のどの対象の演算もできます.
36821 ワード
JavaScriptの最終面の試験問題:null==undefined、[]+{}、{}などの結果はいくらですか?全部見てから、奇経八脈のどの対象の演算もできます.一、同等の原理 二、違い 三、例(各種演算子解析付き) 1.シンプルタイプ比較 2.複雑タイプ比較 1)valueOfのみを書き換える() 2)valueOf()およびtoString()を書き換えて参照の種類に戻る 3.ifアプリケーションシーン 4.エラー 5.加算 6.除算法 7.減算 8.余を求める 各種変数Number、toString集合(これらは暗黙的に変換されることを覚えておく) 一、イコールの原理
紹介する前にまずまとめておきます.javascriptで変数のタイプは5種類の基本タイプです.Unidefined、Null、Boolean、Number、Stringです.他のオブジェクトタイプのAray、Function、Dateなどがあります.==イコール、両者の内容の比較は、2つの場合があります.1.両者のタイプが違って、暗黙的な変換があります.2.両者のタイプが同じで、内容を直接比較して暗黙的に変換する場合は、原則として次の通りです.1.両方が基本タイプの場合、一つがブールタイプの場合、優先呼び出し
二、違います
まとめ:違った比較にNumber()が必要な変数は
1.シンプルなタイプの比較
参照タイプがvalueOf()とtoString()を書き換えた場合も注意してください.toStringが返すのが基本タイプではなく、基本タイプと比較すると異常が発生し、対象と比較すると問題はありません.
1)valueOfのみを書き換える()
ifはブール値trueとの比較と見なすことができる.
エラー:
5.加算
任意の変数の前に加算ができます.すなわち、Numberの強制変換です.
6.乗除法
掛け算
Numberは以下の通りです
パラメータ
結果
undefined
NaN
null
+0
bollan
trueは1に変換され、falseは+0に変換されます.
number
変換なし
ストリングス
文字列から数値に解析します.例えば、「324」は324に変換される.
Aray
[]は0;[基本タイプ]は基本タイプのNumber後の値です.その他は全部NaNです
Object
NaN
toStringまたは文字列変換の結果は以下の通りです.
パラメータ
結果
undefined
「undefined」
null
「null」
bollan
「true」または「false」
number
数字は文字列として使われます.例えば、「1.765」
ストリングス
変換なし
Aray
[]为';他には、例えば、[null,46,{},undefined,new Date(‘2020-05-27]),[].toString()/",46,[object Object],Wed May 27 2020 08:00 GMT+0800(中国標準時間),"
Object
「[object Object]」
参考記事:https://dorey.github.io/JavaScript-Equality-Table/#three-equals
紹介する前にまずまとめておきます.javascriptで変数のタイプは5種類の基本タイプです.Unidefined、Null、Boolean、Number、Stringです.他のオブジェクトタイプのAray、Function、Dateなどがあります.==イコール、両者の内容の比較は、2つの場合があります.1.両者のタイプが違って、暗黙的な変換があります.2.両者のタイプが同じで、内容を直接比較して暗黙的に変換する場合は、原則として次の通りです.1.両方が基本タイプの場合、一つがブールタイプの場合、優先呼び出し
Number()
ブールタイプを0/1に変換します.2.両方が基本タイプの場合、一つは文字列で、一つは数字タイプの場合、優先呼び出しNumber()
文字列を数字に変換する.3.基本タイプと引用タイプを比較する場合、優先的に対象を呼び出したvalueOf()
基本タイプに変換し、戻りが基本タイプでない場合は再呼び出しtoString()
方法を返し、文字列タイプに変換して比較する.4.引用の種類と引用の種類を比較する場合、比較するのは両者の引用の住所であり、同じ参照ではない.5.特例、null == undefined
null、undefinedと他の比較は全部false
==三イコール、厳密イコール、両者のタイプを先に比較し、両者の内容を比較する.二、違います
まとめ:違った比較にNumber()が必要な変数は
Boolean
、Number
とString
の3種類で、valueOf()とtoString()がObject、Aray、Funct、Dateなどが必要です.//Nmuber()
Number(true) // 1
Number(false) // 0
Number(1) // 1
Number("1") // 1
//valueOf
({a:'1'}).valueOf() // {a: "1"}
[1,2,3].valueOf() // [1, 2, 3]
(function test(){}).valueOf() // ƒ test(){}
(new Date('2020-05-26')).valueOf() // 1590451200000
// toString
({a:'1'}).toString() // "[object Object]"
[1,2,3].toString() // "1,2,3"
(function test(){}).toString() // "function test(){}"
(new Date('2020-05-26')).toString() // "Tue May 26 2020 08:00:00 GMT+0800 ( )"
Date , toString , [] toString '';{} toSting "[object Object]"
三、実例(各種演算子解析付き)1.シンプルなタイプの比較
1 == true //true // Number Boolean
2 == true //false
1 == "1" //true // Number String
[] == "" //true // Object String
[] == false // true // Object Boolean
[] == 0 //true // Object Number
({}) == "[object Object]" // true
[] == {} //false
[] == [] //false
{} == {} //false
null == undefined //true
2.複雑なタイプの比較参照タイプがvalueOf()とtoString()を書き換えた場合も注意してください.toStringが返すのが基本タイプではなく、基本タイプと比較すると異常が発生し、対象と比較すると問題はありません.
1)valueOfのみを書き換える()
, Object.prototype.toString()
var a = 1;
var obj = {valueOf: function(){ return {} }}
a == obj // false
2)valueOf()およびtoString()を書き換えて参照の種類に戻る , , toString()
var a = 1;
var obj = {valueOf: function(){ return {} }, toString: function(){ return {}}}
obj == a // Uncaught TypeError: Cannot convert object to primitive valueat :3:5
, , valueOf() toString()
var a = 1;
var obj = {valueOf: function(){ return {} }, toString: function(){ return {}}}
obj == {} // false
オブジェクトと基本タイプの比較時の呼び出し順序は以下の通りです.属性valueOf->Object.prototype.valueOf->tostring-->Object.prototype.toStringvar a = 1;
var obj = {valueOf: function(){ return "" }, toString: function(){ return '1'}}
obj == a
false
3.ifアプリケーションシーンifはブール値trueとの比較と見なすことができる.
if(true) console.log("true"); //true
if(false) console.log("true");
if(1) console.log("true"); //true
if(0) console.log("true");
if(-1) console.log("true"); //true
if("true") console.log("true"); //true
if("1") console.log("true"); //true
if("0") console.log("true"); //true
if("") console.log("true");
if(null) console.log("true");
if(undefined) console.log("true");
if("null") console.log("true"); //true
if("undefined") console.log("true"); //true
if([]) console.log("true"); //true
if({}) console.log("true"); //true
if([0]) console.log("true"); //true
if(NaN) console.log("true");
4.落とし穴エラー:
0 == "0" //true
0 == [] //true
"0" == [] // false
[] == '' // true
'0' == '' //false
"aabs"-'A' // NaN
"aabs"+'A' // "aabsA"
"0" == [] false
[].toString()の後は文字列が空で、==伝達性がない、==を備えています.5.加算
任意の変数の前に加算ができます.すなわち、Numberの強制変換です.
+undefined // NaN
+null // 0
+true // 1
+false // 0
+"123" // 123
+1 // 1
+{} // NaN
+[] // 0
+(new Date('2020-05-27')) // 1590537600000
+(function(){}) // NaN
当ててみます:[]+[]+{}、{}+[]、{}+{}の結果はそれぞれ何ですか?答え:“”、“object Object”、0、“object Object”はあなたの考えと同じですか?𗺲答えは詳しく分かりますが、変数を足すにはどのような規則がありますか?同様に遵守します.1.基本タイプを加算し、文字列がある場合は文字列のつづり合わせで、文字列1を返します.基本タイプが加算され、文字列がない場合はNumber()を優先して加算し、数字3を返します.引用タイプがある場合は、優先的にvalueOf、tostringを基本タイプに変えて、上記の2つの原則で加算します.6.乗除法
掛け算
1*undefined // NaN
1*null // 0
1*true // 1
1*false // 0
1*"123" // 123
1*1 // 1
1*{} // NaN
1*[] // 0
1*(new Date('2020-05-27')) // 1590537600000
1*(function(){}) // NaN
"2"*[] // 0
({})*[] // NaN
法を割る1/undefined // NaN
1/null // Infinity
1/true // 1
1/false // 0
1/"123" // 1/123
1/1 // 1
1/{} // NaN
1/[] // Infinity
1/(new Date('2020-05-27')) // 1/1590537600000
1/(function(){}) // NaN
"2"/[] // Infinity
({})/[] // NaN
7.減算1-undefined // NaN
1-null // 1
1-true // 0
1-false // 1
1-"123" // -122
1-1 // 0
1-{} // NaN
1-[] // 1
1-(new Date('2020-05-27')) // -1590537599999
1-(function(){}) // NaN
"2"-[] // 2
({})-[] // NaN
"aabs"-'A' // NaN
8.余を求める1%undefined // NaN
1%null // NaN
1%true // 0
1%false // NaN
1%"123" // 1
1%1 // 0
1%{} // NaN
1%[] // NaN
1%(new Date('2020-05-27')) // 1
1%(function(){}) // NaN
"2"%[] // NaN
({})%[] // NaN
"aabs"%'A' // NaN
各種変数Number、toString集合(これらは暗黙的に変換されることを覚えておく)Numberは以下の通りです
パラメータ
結果
undefined
NaN
null
+0
bollan
trueは1に変換され、falseは+0に変換されます.
number
変換なし
ストリングス
文字列から数値に解析します.例えば、「324」は324に変換される.
Aray
[]は0;[基本タイプ]は基本タイプのNumber後の値です.その他は全部NaNです
Object
NaN
toStringまたは文字列変換の結果は以下の通りです.
パラメータ
結果
undefined
「undefined」
null
「null」
bollan
「true」または「false」
number
数字は文字列として使われます.例えば、「1.765」
ストリングス
変換なし
Aray
[]为';他には、例えば、[null,46,{},undefined,new Date(‘2020-05-27]),[].toString()/",46,[object Object],Wed May 27 2020 08:00 GMT+0800(中国標準時間),"
Object
「[object Object]」
参考記事:https://dorey.github.io/JavaScript-Equality-Table/#three-equals