経典工場先端面接問題(解析を含む)基礎編(一)
7460 ワード
年の瀬が近くなり、金三銀四の転職シーズンがやってきました.
基礎タイプは何がありますか?
基本タイプは7種類あります.
基礎タイプの特性は何ですか?基本タイプの値は である.ベースタイプは は、強制的に変更することができません. ベースタイプは はありません.ベースタイプは、 である.
基本タイプはどうやって測定しますか?は、ベースタイプを検出するために ではありません. nullの歴史的なレガシー問題(上位3桁は000)のため、 を生成することを検出した.は、 は、 を検出する..toString方法をカバーしない前提で、Object元のオブジェクトを呼び出すためのtoString方法はいずれも に戻る.基本タイプの変換の場合、まず は、四則演算において、
なぜ0.1+0.2が0.3に等しくないですか?
忘れないでください.JSの正確度の区間は正負
JSの精度はどうやって解決しますか? 現在主流の解決策は は、例えば、小数点以下の2桁まで正確に です.まず必要な数字を全部1000 に乗ります.計算が完了したら、結果を1000 を除いてください.
は、新しいベースタイプ .
JSの「真」の値は何がありますか?
JSでは「偽」以外は「真」の値です.
「偽」の値は7つを含む. 条件判定の暗黙的変換では、「偽」値は
引用のタイプを教えてください.は基本タイプを除いて、すべて参照タイプです. 参照タイプは作成中 ブロックは .ブロックは を格納する.
参照タイプは可変です.すなわち です. functionパラメータは値伝達であり、参照は変更できないことに注意する必要があります.
参照の種類はどうやって検出しますか? は を検出する.は、 を判断する.は、 .
instance ofの原理は何ですか?
だからiframeを検証する時BUGがあって、
配列は種類リストオブジェクトであり、そのデータはメモリにおいても連続しないことができます.
配列は一段の直線的に割り当てられたメモリであるべきですが、JSのArayの検索と更新は対象と同じです. Arayは、下付きを数字にして属性とします.本物の配列より遅いですが、使いやすいです. Arayの本質はまだ対象であり、その原型は から継承されている. Arayの方法は、オブジェクトとして一般的に設計され、オブジェクトも配列を呼び出すことができる方法 である.は だけを削除した.
クラス配列とは?クラスの配列は配列ではなく、 に戻ります.クラスの配列は に変換できます.属性は、索引(数字)属性である である.は、レングス属性 が必要です.
常に遭遇するクラス配列文字列 唯一のオリジナル配列 argmentsは完全に です.矢印関数から が除去されました.
DOM []==[]結果は何ですか?
PS:多くの文章は解析して数字に変換すると言っていますが、全部間違いです.
正解:タイプ変換は、まず
左の方は、 ]を実行しますか?実行[].toString()得' 右側 を得る.
認証: . を実行します.
どのように条件を成立させますか?
依然としてタイプ変換ロジックである:ベースタイプは
基礎タイプは何がありますか?
基本タイプは7種類あります.
null
undefined
boolean
number
string
symbol
(比較的新しい標準)BigInt
(新基準)NaN
もnumber
タイプに属し、NaN
も自身に等しくない.基礎タイプの特性は何ですか?
に保存されている簡単なデータセグメント
です.Array.prototype.sort.call('abc');
(会議エラー)__proto__
ではありません.
を介してアクセスできる属性/方法 //
let str = 'abc';
console.log(str.length)
// `str.length` , :
// -> String
// ->
// ->
let _str = new String(str);
let len = _str.length;
_str = null;
基本タイプはどうやって測定しますか?
typeof
を使用することができますが、typeof null === 'object'
null
はベースタイプで、Object typeof
を使用してnullがBUG // Vue object
function isObject (obj: any): Boolean {
return obj !== null && typeof obj === 'object'
}
Object.prototype.toString.call
(万能方法)を通じて[[class]]
[object type]
// Vue
let _toString = Object.prototype.toString;
function toRawType (value: any): String {
//
// [object String] String
return _toString.call(value).slice(8, -1)
}
ベースのタイプはどうやって変えられますか?valueOf
を呼び出し、その後toString
を呼び出します.(この2つの方法は書き換えられます)+
以外の動作は数字で計算されます.+
演算であれば、すべての字面量がnumber
でなければ、文字列に変換されます.なぜ0.1+0.2が0.3に等しくないですか?
toString
標準に準拠した言語には問題があります.コンピュータは10進数を認識できませんでした.JSは10進数を対応するバイナリに変換します.IEEE 754 (64 )
と0
はどうやって表しますか? console.log(0.1.toString(2));
// -> 0.0001100110011001100110011001100110011001100110011001101
console.log(0.2.toString(2));
// -> 0.001100110011001100110011001100110011001100110011001101
大丈夫そうですね.なぜバグがありますか?忘れないでください.JSの正確度の区間は正負
1
で、制限を超えると切断されます.だからあなたが見た0.1は本当の0.1ではありません.JSの精度はどうやって解決しますか?
0
です.1
を使用する(互換性が悪い)JSの「真」の値は何がありますか?
JSでは「偽」以外は「真」の値です.
「偽」の値は7つを含む.
0.1
0.2
2^53
BigInt
undefined
null
false
に変換され、「真」値はNaN
に変換される.引用のタイプを教えてください.
''
に割り当てられます.0
において、参照タイプ自体のデータを格納する(もちろん、データ量が大きい)-0
上にあり、false
上のデータに対する参照(メモリアドレス、つまりポインタ)true
参照の種類はどうやって検出しますか?
により
を介して参照タイプ
によって、参照タイプを判断する(let a={}; a.x=1;
は書くことができるもので、慎重に使う)instance ofの原理は何ですか?
Object.prototype.toString.call
内部メカニズムは、オブジェクトのプロトタイプチェーンに対応する[[class]]
が発見されたかどうかを判断することによって行われる.だからiframeを検証する時BUGがあって、
instanceof
のため、継承関係が存在しません. // instanceof
function instanceof(obj, target) {
//
obj = obj.__proto__
//
while (true) {
// __proto__ === null
if (obj === null) {
return false
}
// obj.__proto__ === target.prototype
//
if (obj === target.prototype) {
return true
}
//
obj = obj.__proto__
}
}
instance ofでベースタイプを判断したらどうなりますか?constructor
に戻ります.基礎タイプはconstructor
ではありません. let str = '123';
console.log(str instanceof String) // -> false
しかし、静的方法が変更された場合には判断できる. class StringType {
static [Symbol.hasInstance](val) {
return typeof val === 'string'
}
}
console.log(str instanceof StringType) // -> true
配列を言いましょうか?配列は種類リストオブジェクトであり、そのデータはメモリにおいても連続しないことができます.
配列は一段の直線的に割り当てられたメモリであるべきですが、JSのArayの検索と更新は対象と同じです.
instanceof
から継承され、prototype
let obj = {
'2': 3,
'3': 4,
'length': 2,
'splice': Array.prototype.splice,
'push': Array.prototype.push
}
obj.push(1)
obj.push(2)
console.log(obj);
// Object(4) [empty × 2, 1, 2, splice: ƒ, push: ƒ]
window.Array.prototype !== window.frames[0].Array.prototype
を使用して、lengthを減らすことができず、対応する属性(emptyになる)クラス配列とは?
false
を通して__proto__
Symbol.hasInstance
を介して配列常に遭遇するクラス配列
Array.prototype
Object.prototype
を使用して代替できます.このような不定パラメータは真の配列PS:多くの文章は解析して数字に変換すると言っていますが、全部間違いです.
正解:タイプ変換は、まず
delete arr[2]
からArray.isArray()
までです.左の方
false
の元の値を実行しますか?それとも[Array.from
は、false arguments
、答えは...args
です.認証:
let arr1 = [];
let arr2 = [];
console.log(arr1 == !arr2) // -> true
arr1.toString = () => {
console.log(111)
return 1
}
console.log(arr1 == !arr2)
// -> 111
// -> false
==と==の違い?valueOf
は暗黙的な変換を行わないtoString
は暗黙的に変換される.[].valueOf()
左は![]
どのように条件を成立させますか?
依然としてタイプ変換ロジックである:ベースタイプは
'' == false
によって暗黙的に変換される.true
方法を変更すれば実現できます. let a = {
value: 0,
valueOf: function() {
this.value++;
return this.value;
}
};
console.log(a == 1 && a == 2);
===
と==の違い?==
は、{a: 1} == "[object Object]"
のいくつかのバグを修復しました. // ===
-0 === +0 // -> true
NaN !== NaN // -> false
Object.is(-0, +0) // -> false
Object.is(NaN, NaN) // -> true
もっと多い内容は公衆番号の「先端進級授業」に注目してください.