JS基礎及概念


ES6中常見語法規(guī)定和關鍵字

常見語法

1.定義函數(shù):不需要function也能定義一個函數(shù),更加簡便。
2.以前的js中通常用functionprototype模擬類,而新的語法可以創(chuàng)建一個類class。
3.let與const相關語法。
4.箭頭操作符=>簡化函數(shù)書寫,左邊為輸入?yún)?shù),右邊為操作及返回值。
5.允許使用`創(chuàng)建字符串,可以包含${num}這樣的變量。
6.ES6利用解構這一特性可使一個函數(shù)直接返回一個數(shù)組,值被自動解析到對應接收的變量中;還可以在定義函數(shù)的同時指定參數(shù)的默認值。

關鍵字
  • let,const詳見下文
  • set
    一群值的集合,可變,能增刪元素(與數(shù)組區(qū)別:不會包含重復元素,重復不會產(chǎn)生效果)

經(jīng)典算法

斐波納契數(shù)列(兔子問題)

<code>function fn(n){
if(n==1|n==2) {return 1;}
else return fn(n-1)+fn(n-2);
}
var n=parseInt(promt("Please input a number"));
var f1=1,f2=1,f=0;
for(var i=2;i<=n;i++) {
f=f1+f2;
f1=f2;
f2=f;
console.log(f);
}</code>

排序

<pre>
選擇排序
var array = [2,5,8,3,6,9];
for(var j=0; j<array.length-1;j++){
var min=array[j];
var m=j;
for(var i=j+1; i<array.length;i++){
if(array[i]<min){
min=array[i];
m=i;
}
}
if(m!=j){
var t=array[m];
array[m]=array[j];
array[j]=temp;
}
}
冒泡排序
var array = [2,5,8,3,6,9];
for(var j=0; j<array.length-1;j++ ){
for(var i=0; i<array.length-j-1;i++){
if(array[i]>array[i+1])
{
var t=array[i];
array[i]=array[i+1];
array[i+1]=t;
}
}
document.write(array);
}//還應該考慮到數(shù)組本來就是升序或降序直接輸出的情況</pre>
還有素數(shù),完數(shù),數(shù)字逆置等算法(后續(xù)整理)

JavaScript中對數(shù)組的操作

1.定義

var Array=new Array() 括號內可填整數(shù)
var Array=new Array(" "," "," ") 用此形式對數(shù)組初始化

2.訪問

document.write(Array[0]) 可以訪問某個特定的元素

3.修改

Array[0]=" "; 向指定下表號添加一個新值

4.刪除

Array.pop(); 移除最后一個元素并返回該值
Array.shift(); 移除第一個元素并返回該值,數(shù)組元素自動前移
Array.splice(P,C)刪除從指定位置開始的指定數(shù)量的元素,返回移除的元素

5.添加

Array.push([item1[item2[item3[...]]]]);一個或多個元素添加到數(shù)組結尾,返回新長度
Array.unshift([item1[item2[item3[...]]]]);一個或多個元素添加到數(shù)組開頭,返回新長度,元素自動后移
Arrray.splice([item1[item2[item3[...]]]]);一個或多個元素插入到指定位置,其后元素自動后移,返回""

6.拷貝

Array.slice(0);返回數(shù)組的拷貝數(shù)組(新數(shù)組)
Array.concat();同上

7.排序

Array.reverse();反轉數(shù)組,返回數(shù)組地址
Array.sort();對數(shù)組排序,返回數(shù)組地址

8.字符串化

Array.join(s);返回字符串,將數(shù)組的每個元素值連接,用s隔開

var,let,const的區(qū)別及辨析

var

JavaScript中創(chuàng)建變量通常被稱為"聲明"變量,可以通過var語句來聲明js變量。
js變量可以用來存放數(shù)值,也可以用來保存文本值(賦予字符串),通過var語句實現(xiàn)。

let

let是ES6中新增的js命令,用法類似var。

const

const也是ES6中新增的命令,但用于聲明一個只讀的常量,聲明之后其值不能改變。

區(qū)別:

1.從用法上來說,var,let用于聲明變量,而const用于聲明一個只讀常量。
2.let所聲明的變量只在其所在的代碼塊里有效,
for(let I=0;i<10;i++) { }{ let a=0; }所以在塊外調用變量時會編譯器會報錯。let和var類似于c語言中的局部變量和全局變量。
3.var命令會發(fā)生"變量提升"現(xiàn)象,即變量可以在聲明前使用,值為undefined,與一般邏輯多少有些不和,而let命令所聲明的變量一定要在聲明后使用,否則報錯。
4.若在let聲明變量之前有var對同名變量的賦值等操作,編譯器就會報錯。let聲明變量的這一塊就稱為"暫時性死區(qū)"。
5.與var不同,let不允許在相同作用域內重復聲明同一個變量。
6.對于const,只聲明不賦值會報錯;const作用域與let相同;同樣不會"變量提升";不可重復聲明。(const實際上保證變量指向的內存地址不變動,不能完全控制所指向的數(shù)據(jù)結構)

JavaScript的原型繼承

(完全引用..)
說原型繼承之前還是要先說說原型和原型鏈,畢竟這是實現(xiàn)原型繼承的基礎。
在Javascript中,每個函數(shù)都有一個原型屬性prototype指向自身的原型,而由這個函數(shù)創(chuàng)建的對象也有一個proto屬性指向這個原型,而函數(shù)的原型是一個對象,所以這個對象也會有一個proto指向自己的原型,這樣逐層深入直到Object對象的原型,這樣就形成了原型鏈。下面這張圖很好的解釋了Javascript中的原型和原型鏈的關系。

yxjc.jpg

原型繼承
基本模式

<code>var Parent = function(){
this.name = 'parent' ;
} ;
Parent.prototype.getName = function(){
return this.name ;
} ;
Parent.prototype.obj = {a : 1} ;

var Child = function(){
this.name = 'child' ;
} ;
Child.prototype = new Parent() ;

var parent = new Parent() ;
var child = new Child() ;

console.log(parent.getName()) ; //parent
console.log(child.getName()) ; //child</code>
原型繼承后繼內容 這部分沒看懂.....

JavaScript的this與Java中的this區(qū)別

js中的this

this是JavaScript的關鍵字,代表函數(shù)運行時,自動生成的一個內部對象,只能在函數(shù)內部使用。
<code>function test(){
this.x=1;
}</code> this的值會隨著函數(shù)使用場合不同變化,但總指向調用函數(shù)的那個對象。

  • 函數(shù)全局性調用時,this就代表全局對象Global。
  • 函數(shù)作為某個方法的對象調用時,this就指這個上級對象。
  • 作為構造函數(shù)調用時,this就指這個生成的新對象
  • apply()作為函數(shù)對象的一個方法,改變函數(shù)的調用對象,此時this就指的是改變后的這個對象。
java中的this

(查閱相關資料..并沒有理解)
java中用類名定義一個變量的時候,定義的只是一個引用,外面可以通過這個引用來訪問這個類里面的屬性和方法。類里面也有一個引用來訪問自己的屬性和方法——this對象
1.類內部當中對自己的一個引用,可以方便類中方法訪問自己的屬性;
2.可以返回對象的自己這個類的引用,同時還可以在一個構造函數(shù)當中調用另一個構造函數(shù)。

一些不好的特性

1.對全局變量的依賴性,隨代碼越來越多,程序越來越大,子程序中的變量名很有可能和全局變量名沖突。
2.沒有塊級作用域,只有函數(shù)作用域。
3.js里有許多不會使用但保留著的單詞,如class。
4.二進制浮點數(shù)不能正確處理十進制小數(shù),例0.1+0.2不等于0.3。
5.偽數(shù)組,js里的數(shù)組實際上是一個屬性名為整數(shù),具有l(wèi)ength屬性的對象。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容