javascript
javascript底层练习
1.請看下列代碼:
function F(){function C(){ return this; } return C(); } var o=new F();請問上面的this值指向的是全局對象還是對象o?
答:全局對象。
在
?
這里面this指向了全局對象,?
在return C();時,調用C方法,返回了全局對象,
然后return了全局對象。
在new構造函數時,如果構造函數沒有return語句,返回的是構造函數的this,如果有return語句,并且return的是一個對象,那么new出來的就是return的這個對象;如果return一個基本類型的對象,那么new出來還是構造函數的this。
所以在最后return C()的時候相當于return 全局對象,全局對象不是基本類型,所以o指向的全局對象。
2.下面代碼的執行結果會是什么?
function C(){this.a=1; return false; } console.log(typeof new C());?
跟上面這個題考點一樣啊。。。
輸出object
3.下面這段代碼的執行結果又將是什么?
var c=[1,2,[1,2]]; c.sort(); c.join("--"); console.log(c);- 1
- 2
- 3
- 4
答:[1,[1,2],2]
sort完以后數組變成這樣,join方法不改變數組。
如果題目是
?
最后輸出join的結果,是 1-1,2-2?
這個結果好有迷惑性,如果沒想通仔細想一下,我是暈了會才發現就這樣啊。。。
4.在String()構造函數不存在的情況下自定義一個MyString()的構造器函數。記住,由于String()不存在,因此您在寫構造器函數時不能使用任何屬于內建String對象的方法和屬性。并且要讓您所創建的對象通過以下測試:
var s = new MyString("hello"); s.length; //5s[0]; //"h" s.toString(); //"hello" s.valueOf(); //"hello" s.charAt(1); //"e" s.charAt("2"); //"l" s.charAt("e"); //"h" s.concat(" world!"); //"hello world!" s.slice(1,3); //"el" s.slice(0,-1); //"hell" s.split("e"); //["h","llo"] s.split("l"); //["he","","o"]?
如果您覺得這個練習很有趣,可以不用止步于join()方法,繼續為其創建盡可能多的方法。
參考答案:
function MyArray(){this.length=arguments.length; for(var i=0;i<this.length;i++){ this[i]=arguments[i]; } this.toString=function(){ var resultStr=""; for(var i=0;i<this.length;i++){ if(i===this.length-1){ resultStr+=this[i].toString(); }else{ resultStr+=this[i].toString()+","; } } return resultStr; }; this.push=function(obj){ this[this.length]=obj; this.length++; return this.length; }; this.pop=function(){ if(this.length===0){ return null; } result=this[this.length-1]; this[this.length-1]=undefined; this.length--; return result; }; this.join=function(str){ var resultStr=""; for(var i=0;i<this.length;i++){ if(i===this.length-1){ resultStr+=this[i].toString(); }else{ resultStr+=this[i].toString()+str; } } return resultStr; } }?
7.在Math對象不存在的情況下,創建一個類似的MyMath對象,并為其添加以下方法:
1)MyMath.rand(min,max,inclusive)-隨機返回min到max區間中的一個數,inclusive為true時為閉區間(這也是默認情況)。
2)MyMath.min(array)-返回目標數組中的最小值。
3)MyMath.Max(array)-返回目標數組中的最大值。
參考答案:
function MyMath(){}MyMath.rand=function(min,max,inclusive){ if(typeof min!=="number"){ throw new Error("type error"); return; } if(typeof max!=="number"){ throw new Error("type error"); return; } if(min>max){ throw new Error("parameter error"); return; } if(typeof inclusive==="undefined"){ inclusive=true; }else{ inclusive=!!inclusive; } if(inclusive){ if(Math.random()>0.5){ return min+(max-min)*Math.random(); }else{ return max-(max-min)*Math.random(); } }else{ //不閉合區間,先排除0的可能 var randomNum=Math.random(); while(randomNum===0){ randomNum=Math.random(); } return min+(max-min)*randomNum; } }; MyMath.min=function(){ if(arguments.length===0){ throw new Error("no parameter"); return; } var minValue; var l=arguments.length; for(var i=0;i<l;i++){ var param=arguments[i]; if(typeof param!=="number"){ throw new Error("parameter error"); return; } if(i===0){ minValue=param; } if(minValue>param){ minValue=param; } } return minValue; }; MyMath.max=function(){ if(arguments.length===0){ throw new Error("no parameter"); return; } var maxValue; var l=arguments.length; for(var i=0;i<l;i++){ var param=arguments[i]; if(typeof param!=="number"){ throw new Error("parameter error"); return; } if(i===0){ maxValue=param; } if(maxValue<param){ maxValue=param; } } return maxValue; };?
轉載于:https://www.cnblogs.com/hngdlxy143/p/9736620.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的javascript底层练习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LibreOj 6279数列分块入门 3
- 下一篇: CentOS 7下宿主机使用virsh