ホームページ > 記事 > ウェブフロントエンド > JavaScript の面接での 14 の厳しい質問に対するコード例の詳細な分析
フロントエンド エンジニアは、面接中にある種の面接官に遭遇することがあります。彼らが尋ねる質問は、言語自体について非常に深刻であり、多くの場合、候補者が期待する実際的な質問ではありません (一部の候補者は、それができれば十分であると強調します。理由を知っているかどうかについては関係ありません)。このタイプの質問には論理はありませんが、受験者の javascript
言語に対する理解をある程度テストします。 javascript
这门语言的理解。
突然想到这个话题是无聊在翻自己的Github,看看以前都写过什么丑货。然后翻到了这篇解释Javascript quiz的文章quiz-legend,反正没事儿,就想搬过来供大家学习、理解、背诵、批判。
(function(){ return typeof arguments;//"object" })();
arguments
是一个Array-like对象,对应的就是传入函数的参数列表。你可以在任何函数中直接使用该变量。
typeof
操作符只会返回string
类型的结果。参照如下列表可知对应不同数据,typeof
返回的值都是什么:
类型 | 结果 |
---|---|
undefined |
'undefined' |
null |
'object' |
Boolean |
'boolean' |
Number |
'number' |
String |
'string' |
Symbol (new in ECMAScript 2015) | 'symbol' |
Host object (provided by the JS environment) | Implementation-dependent |
Function object (implements [[Call]] in ECMA-262 terms) | 'function' |
Any other object | 'object' | 私が突然このトピックを思い出したのは、退屈していて、自分が以前にどんな醜いことを書いたかを確認するために Github を調べていたからです。そんなとき、JavaScript クイズを説明するこの記事のクイズ凡例を見つけました。とにかく、それでいいので、誰もが学び、理解し、暗唱し、批判できるようにここに移動したいと思いました。
typeof
演算子は、string
型の結果のみを返します。さまざまなデータに対して typeof
によって返される値が何であるかを確認するには、次のリストを参照してください: 🎜入力 | 結果 | 🎜||
---|---|---|---|
未定義 🎜 |
'未定義' 🎜🎜 |
||
null 🎜 |
'オブジェクト' 🎜🎜 |
||
ブール値 🎜 |
'boolean' 🎜🎜 |
||
'number' 🎜🎜 |
|||
文字列 🎜 |
'string' 🎜🎜 |
||
シンボル (ECMAScript 2015 の新機能)🎜 | 'symbol'🎜🎜 | ||
ホスト オブジェクト (JS 環境によって提供される)🎜 | 実装に依存します🎜🎜 | 関数オブジェクト (ECMA-262 用語で [[Call]] を実装)🎜 |
'function' 🎜🎜 |
'object' 🎜🎜🎜🎜
问题二var f = function g(){ return 23; }; typeof g();//报错 这是一个名字是 这里的函数名
问题三(function(x){ delete x; return x;//1 })(1);
delete object.property delete object['property']
问题四var y = 1, x = y = typeof x; x;//"undefined" 我们试图分解上述代码成下面两步: var y = 1; //step 1 var x = y = typeof x; //step 2 第一步应该没有异议,我们直接看第二步
问题五(function f(f){ return typeof f();//"number" })(function(){ return 1; }); 直接上注释解释: (function f(f){ //这里的f是传入的参数function(){ return 1; } //执行的结果自然是1 return typeof f(); //所以根据问题一的表格我们知道,typeof 1结果是"number" })(function(){ return 1; }); 问题六var foo = { bar: function() { return this.baz; }, baz: 1 }; (function(){ return typeof arguments[0]();//"undefined" })(foo.bar); 这里你可能会误以为最终结果是 问题七var foo = { bar: function(){ return this.baz; }, baz: 1 } typeof (f = foo.bar)();//"undefined" 这和上一题是一样的问题, 问题八var f = (function f(){ return '1'; }, function g(){ return 2; })(); typeof f;//"number" 逗号操作符 对它的每个操作对象求值(从左至右),然后返回最后一个操作对象的值 所以 问题九var x = 1; if (function f(){}) { x += typeof f; } x;//"1undefined" 这个问题的关键点,我们在问题二中谈到过, 问题十var x = [typeof x, typeof y][1]; typeof typeof x;//"string"
问题十一(function(foo){ return typeof foo.bar;//"undefined" })({ foo: { bar: 1 } }); 这是个纯粹的视觉诡计,上注释 (function(foo){ //这里的foo,是{ foo: { bar: 1 } },并没有bar属性哦。 //bar属性是在foo.foo下面 //所以这里结果是"undefined" return typeof foo.bar; })({ foo: { bar: 1 } }); 问题十二(function f(){ function f(){ return 1; } return f();//2 function f(){ return 2; } })(); 通过 (function f(){ function f(){ return 1; } function f(){ return 2; } return f(); })(); 问题十三function f(){ return f; } new f() instanceof f;//false 当代码
于是,我们这里的 问题十四with (function(x, undefined){}) length;//2
OK,现在我们来看,由于 写在最后有人觉得这些题坑爹,也有人觉得开阔了眼界,见仁见智吧。但有一件事是真的,无论你是否坚定的实践派,缺了理论基础,也铁定走不远 - 你永远不会见到哪个熟练的技术工人突然成了火箭专家。 看文档、读标准、结合实践,才是同志们的决胜之道。 以上就是关于14 个折磨人的 JavaScript 面试题的代码示例详细分析的内容,更多相关内容请关注PHP中文网(www.php.cn)!
|