今日心靈雞湯:「你必定得認識到本身想往哪一個方向發展,而後必定要對準那個方向出發,要立刻。你再也浪費不起多一秒的時間了,你浪費不起。」javascript
演示 js 的網站:
impress
naotu
codecombat
codemao
google
blockly-games
blocklycss
創始人 Brendan Eich(布萊登.艾奇),Netscape在最初將其腳本語言命名爲LiveScript,後來Netscape在與Sun合做以後將其更名爲JavaScript。JavaScript最初受Java啓發而開始設計的,目的之一就是「看上去像Java」,所以語法上有相似之處,一些名稱和命名規範也借自Java。JavaScript與Java名稱上的近似,是當時Netscape爲了營銷考慮與Sun微系統達成協議的結果。Java和JavaScript的關係就像張雨和張雨生的關係,只是名字很像。
Java 服務器端的編程語言,JavaScript 運行在客戶端(瀏覽器)的編程語言。html
JavaScript是一種運行在***客戶端*** 的***腳本語言*** 。JavaScript的解釋器被稱爲JavaScript引擎,爲瀏覽器的一部分,普遍用於客戶端的腳本語言,最先是在HTML(標準通用標記語言下的一個應用)網頁上使用,用來給HTML網頁增長動態功能。最初的目的是爲了處理表單的驗證操做。java
javascript 是什麼?git
<input type="button" value="按鈕" onclick="alert('Hello World')" />
<head><script>alert('Hello World!');</script></head>
<script src="main.js"></script>
變量是計算機內存中存儲數據的標識符,根據變量名稱能夠獲取到內存中存儲的數據。使用變量能夠方便的獲取或者修改內存中的數據。程序員
var age;
var age; age = 18;
var age, name, sex; age = 10; name = 'cjr';
var age = 10, name = 'cjr';
var a,b;a=10;b=20;
var temp; temp = b; b=a; a=temp;
a = a + b; b = a - b; a = a - b;
a = a ^ b; b = a ^ b; a = a ^ b;
// 這是一個變量
var name = 'hm';
/* var age = 18; var name = 'zs'; console.log(name, age); */
/** 還有註釋是這個樣子的,通常用來註釋代碼的做用 @type {Console} */
原始數據類型:number,string,boolean,null,undefined,Symbol (ECMAScript 6 新定義),objectgithub
NaN 與任何值都不相等,包括他自己
var str = 'Hello World'; console.log(str.length);
console.log(11 + 11);
console.log('hello' + ' world');
console.log('11' + 11);
console.log('male:' + true);
var age = 18; console.log(typeof age); // 'number'
在源代碼中一個固定值的表示法。
數值字面量:8, 9, 10;字符串字面量:"Hello World!" ;布爾字面量:true,false。web
字符串的顏色是黑色的,數值類型是藍色的,布爾類型也是藍色的,undefined和null是灰色的。express
var num1 = parseInt("12.3abc"); // 返回12,若是第一個字符是數字會解析知道遇到非數字結束
var num2 = parseInt("abc123"); // 返回NaN,若是第一個字符不是數字或者符號就返回NaN
console.log(parseFloat("12.045fsd")); //12.045
console.log(parseFloat("dasd41531")); //NaN
// parseFloat會解析第一個. 遇到第二個.或者非數字結束。若是解析的內容裏只有整數,解析成整數
console.log(Number("1521dasd")); //NaN
console.log(Number("dasd123")); //NaN
// Number()能夠把任意值轉換成數值,若是要轉換的字符串中有一個不是數值的字符,返回NaN
console.log("11" * 2); //22
console.log("22" - 10); //12
console.log("12" + 10); //1210字符串
var str = '500'; console.log(-str); //-500 console.log(+str); // 500
var num = 5;
console.log(num.toString()); // 5 字符串
console.log(null.toString()); // 報錯
console.log(String(null)); //null
console.log(String(undefined)); //undefined
console.log(Boolean(-4151)); //true
console.log(Boolean("dsada")); //true
console.log(Boolean(undefined)); // false
console.log(Boolean(null)); //false
運算符 operator ,表達式 組成: 操做數和操做符編程
+
(加)、-
(減)、*
(乘)、/
(除)、%
(取餘)
var a = 20; var b = 3;
console.log(a - b); // 17
console.log(a + b); // 23
console.log(a * b); //60
console.log(a / b); //6.666666666666667
console.log(parseInt(a/b)); // 6
console.log(a % b); // 2
&&
(與) :兩個操做數同時爲true,結果爲true,不然都是false
||
(或) :兩個操做數有一個爲true,結果爲true,不然爲false
!
(非) : 取反
console.log(!1); // false
console.log(!0); // true
console.log(true || false); // true
console.log(1 && 0); // 0
<
、>
、 >=
、 <=
、 ==
、 !=
、===
(嚴格等於) 、 !==
(嚴格不等於)
// ==與===的區別:==只進行值得比較,===類型和值同時相等,則相等
console.log(10 == "10"); // true
console.log(10 === "10"); // false
=
、 +=
、 -=
、 *=
、 /=
、%=
var a = 10;
console.log(a *= a); // 100
console.log(a /= a); // 1
console.log(a %= a); // 0
一元運算符:只有一個操做數的運算符;5 + 6 兩個操做數的運算符 二元運算符.
++
:自身加1;--
: 自身減1
var num1 = 5;
++num1; // 6
var num2 = 6;
console.log(num1 + ++num2); // 13
var num1 = 5;
num1++; // 6
var num2 = 6;
console.log(num1 + num2++); // 12
優先級從高到底
一個表達式能夠產生一個值,有多是運算、函數調用、有多是字面量。表達式能夠放在任何須要值的地方。語句能夠理解爲一個行爲,循環語句和判斷語句就是典型的語句。一個程序有不少個語句組成,通常狀況下;分割一個一個的語句。程序有三種流程基本結構。
默認的,從上到下執行的代碼就是順序結構。
根據不一樣的狀況,執行對應代碼。
循環結構:重複作一件事情。
// 語法結構
if (/* 條件表達式 */) {
// 執行語句
}
if (/* 條件表達式 */){
// 成立執行語句
} else {
// 不然執行語句
}
if (/* 條件1 */){
// 成立執行語句
} else if (/* 條件2 */){
// 成立執行語句
} else if (/* 條件3 */){
// 成立執行語句
} else {
// 最後默認執行語句
}
表達式1 ? 表達式2 : 表達式3 // 是對if……else語句的一種簡化寫法
// 表達式1成立,執行表達式2;不然,執行表達式3。
var age = parseInt(prompt("請輸入您的年齡:")); // prompt 彈出輸入框
switch (expression) {
case 常量1: 語句; break;
case 常量2: 語句; break;
case 常量3: 語句; break;
...
case 常量n: 語句; break;
default: 語句; break;
}
break 能夠省略,若是省略,代碼會繼續執行下一個 case。
switch 語句在比較值時使用的是全等操做符, 所以不會發生類型轉換(例如,字符串'10' 不等於數值 10)
var num1 = "10";
switch(num1){
case 10: console.log("執行的10"); break;
case "10": console.log("執行的\"10\""); break;
} // 最後執行的是 "case "10"",嚴格的相等
流程控制語句會把後面的值隱式轉換成布爾類型
// 轉換爲true 非空字符串 非0數字 true 任何對象
// 轉換成false 空字符串 0 false null undefined
var a = !!'123'; // true
在javascript中,循環語句有三種,while、do..while、for循環。
// 當循環條件爲true時,執行循環體,
// 當循環條件爲false時,結束循環。
// 計算1-100之間全部數的和
var i = 1; // 初始化變量,用做循環條件
var sum = 0; // 存儲總和
while (i <= 100) { // 判斷條件
// 循環體
sum += i; // 自增
i++; // 結束條件
}
console.log(sum);
do..while循環和while循環很是像,兩者常常能夠相互替代,可是do..while的特色是無論條件成不成立,都會執行一次。
var i = 1; // 初始化變量
var sum = 0;
do {
sum += i; // 循環體
i++; // 自增
} while (i <= 100); // 循環條件
while和do...while通常用來解決沒法確認次數的循環。for循環通常在循環次數肯定的時候比較方便.
// for循環的表達式之間用的是;號分隔的,千萬不要寫成,
for (初始化表達式1; 判斷表達式2; 自增表達式3) {
// 循環體4
var num1 = 1; var num2 = 1; var num3 = 0;
for(var i=3; i<=12;i++){
num3 = num1 + num2;
num1 = num2;
num2 = num3;
} // 斐波拉切數列: 1,1,2,3,5,8,13,21,34,55
console.log(num3);
break:當即跳出整個循環,即循環結束,開始執行循環後面的內容(直接跳到大括號)
continue:當即跳出當前循環,繼續下一次循環(跳到i++的地方)
上面學習的數據類型,只能存儲一個值(好比:Number/String。想存儲多個數據,就用到數組。
所謂數組,就是將多個元素(一般是同一類型)按必定順序排列放到一個集合中,那麼這個集合咱們就稱之爲數組。
數組是一個有序的列表,能夠在數組中存聽任意的數據,而且數組的長度能夠動態的調整。
var arr1 = []; // 建立一個空數組
var arr2 = [1, 3, 4]; // 建立一個包含3個數值的數組,多個數組項以逗號隔開
var arr3 = ['a', 'c']; // 建立一個包含2個字符串的數組
console.log(arr3.length); // 能夠經過數組的length屬性獲取數組的長度
arr3.length = 0; // 能夠設置length屬性改變數組中元素的個數
var arr4 = [[0,1,2],[3,4,5]]; // 建立多維數組
var array = new Array(); // 定義一個空數組 []
var array = new Array(5); // 定義長度爲 5 的空數組,(5) [empty × 5]
var array = new Array(10,20,30,"sad"); // (4) [10, 20, 30, "sad"]
// 格式:數組名[下標] 下標又稱索引
// 功能:獲取數組對應下標的那個值,若是下標不存在,則返回 undefined。
var arr = ['red',, 'green', 'blue'];
arr[0]; // red
arr[3]; // 這個數組的最大下標爲2,所以返回undefined
for(var i = 0; i < arr.length; i++) {
console.log(arr[i]); // 數組遍歷的固定結構
}
數組的賦值
// 格式:數組名[下標/索引] = 值;
// 若是下標有對應的值,會把原來的值覆蓋,若是下標不存在,會給數組新增一個元素。
var arr = ["red", "green", "blue"];
arr[0] = "yellow"; // 把red替換成了yellow,arr = ["yellow", "green", "blue"];
arr[3] = "pink"; // 數組增長一個pink的值,["yellow", "green", "blue","pink"];
// 冒泡排序
var array = [10, 20, 30, 4, 9, 50];
for (var i = 0; i < array.length - 1; i++) { // 比較的輪數
for (var j = 0; j < array.length - 1 - i; j++) { // 每輪比較的次數
if (array[j] > array[j + 1]) { // 從小到大排序;從大到小排序就是 <
var temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
console.log(array); // [4,9,10,20,30,50]
把一段相對獨立的具備特定功能的代碼塊封裝起來,造成一個獨立實體,就是函數,起個名字(函數名),在後續開發中能夠反覆調用。函數的做用就是封裝一段代碼,未來能夠重複使用。
function 函數名(){ // 函數體 }
var fn = function() { // 函數體 }
tellStory
sayHello
等。函數名();
function getSum() { // 求1-100之間全部數的和
var sum = 0;
for (var i = 0; i < 100; i++) {
sum += i;
}
console.log(sum);
}
getSum(); // 調用
// 函數內部是一個封閉的環境,能夠經過參數的方式,把外部的值傳遞給函數內部
// 帶參數的函數聲明
function 函數名(形參1, 形參2, 形參...){
// 函數體
}
// 帶參數的函數調用
函數名(實參1, 實參2, 實參3);
形參和實參:
var x = 5, y = 6;
fn(x,y);
function fn(a, b) {
console.log(a + b);
}
//x,y實參,有具體的值。函數執行的時候會把x,y複製一份給函數內部的a和b,函數內部的值是複製的新值,沒法修改外部的x,y
當函數執行完的時候,並非全部時候都要把結果打印。咱們指望函數給我一些反饋(好比計算的結果返回進行後續的運算),這個時候可讓函數返回一些東西。也就是返回值。函數經過return返回一個返回值
//聲明一個帶返回值的函數
function 函數名(形參1, 形參2, 形參...){
//函數體
return 返回值;
}
//能夠經過變量來接收這個返回值
var 變量 = 函數名(實參1, 實參2, 實參3);
函數的調用結果就是返回值,所以咱們能夠直接對函數調用結果進行操做。
JavaScript中,arguments對象是比較特別的一個對象,其實是當前函數的一個內置屬性。也就是說全部函數都內置了一個arguments對象,arguments對象中存儲了傳遞的全部的實參。arguments是一個僞數組,所以及能夠進行遍歷
function f(){
//Arguments [Array(6), callee: ƒ, Symbol(Symbol.iterator): ƒ]
console.log(arguments);
console.log(arguments[0]); // (6) [1, 85, 8, 3, 4, 0]
console.log(arguments[1]); // undefined
console.log(arguments.length); // 1
}
f([1,85,8,3,4,0]);
將匿名函數賦值給一個變量,這樣就能夠經過變量進行調用。
var f1 = function (){
// 函數體
}; // 要有逗號結尾
f1(); // 調用函數
關於自執行函數(匿名函數自調用)的做用:防止全局變量污染。
(function () {
alert(123);
})(); // 彈出提示框,123
function fn() {}
console.log(typeof fn); // function
function fn(b) {
var a = 10;
return function () { alert(a+b); }
}
fn(15)(); // 彈出對話框,顯示 25
做用域:變量能夠起做用的範圍
任何一對花括號({和})中的語句集都屬於一個塊,在這之中定義的全部變量在代碼塊外都是不可見的,咱們稱之爲塊級做用域。
在 ES5 以前沒有塊級做用域的的概念,只有函數做用域,現階段能夠認爲JavaScript沒有塊級做用域
變量的做用域是在定義時決定而不是執行時決定,也就是說詞法做用域取決於源碼,經過靜態分析就能肯定,所以詞法做用域也叫作靜態做用域。
在 js 中詞法做用域規則:
var num = 123;
function foo() {
console.log( num ); // 123
}
foo();
if ( false ) {
var num = 123;
}
console.log( num ); // undefiend,若是 false 改成 true,則爲123
function f2(){
num = 10;
}
// f2();
console.log(num);
// 調用了 f2() 就是輸出 10,至關於開闢了空間;沒有調用就報錯
只有函數能夠製造做用域結構, 那麼只要是代碼,就至少有一個做用域, 即全局做用域。凡是代碼中有函數,那麼這個函數就構成另外一個做用域。若是函數中還有函數,那麼在這個做用域中就又能夠誕生一個做用域。
將這樣的全部的做用域列出來,能夠有一個結構: 函數內指向函數外的鏈式結構。就稱做做用域鏈。
// 案例1:
function f1() {
function f2() {
}
}
var num = 456;
function f3() {
function f4() {
}
}
// 案例2
function f1() {
var num = 123;
function f2() {
console.log( num );
}
f2();
}
var num = 456;
f1();
JavaScript 代碼的執行是由瀏覽器中的 JavaScript 解析器來執行的。
JavaScrip t解析器執行 JavaScript 代碼的時候,分爲兩個過程:預解析過程和代碼執行過程。
var a = 25;
console.log(a); // 25
function a() {
console.log(a); // undefine
var a = 10;
}
a(); // a is not a function
var a;
console.log(a); // ƒ a() { console.log('aaaaa'); }
function a() {
console.log('aaaaa');
}
a(); // aaaaa
var a = 1;
console.log(a); // 1
函數內部解析規則
// 一、-----------------------------------
var num = 10;
fun();
function fun() {
console.log(num); // undefined
var num = 20;
}
//二、-----------------------------------
var a = 18;
f1();
function f1() {
var b = 9;
console.log(a); // undefined
console.log(b); // 9
var a = '123';
}
// 三、-----------------------------------
f1();
console.log(c); // 9
console.log(b); // 9
console.log(a); // 報錯
function f1() {
var a = b = c = 9; // 等價於 var a; a=9; b=9; c=9;
console.log(a); // 9
console.log(b); // 9
console.log(c); // 9
}
現實生活中:萬物皆對象,對象是一個具體的事物,一個具體的事物就會有行爲和特徵。
JavaScript中的對象:
var o = {
name: 'cjr',
age: 18,
sex: male,
sayHi: function () {
console.log(this.name);
}
};
var person = new Object(); // 也可使用 var person = {}; 相似數組 var a=[];
person.name = 'cjr';
person.age = 25;
person.job = 'IT';
person.sayHi = function(){
console.log('Hello,everyBody');
}
function Dog(name,age){
var dog = new Object();
dog.name = name;
dog.age = age;
dog.bark = function(){
console.log("嗚嗚嗚嗚嗚~~~");
};
return dog;
}
var ahuang = Dog("阿黃", 3);
console.log(ahuang); // {name: "阿黃", age: 3, bark: ƒ}
ahuang.bark(); // 嗚嗚嗚嗚嗚~~~
function Person(name,age,job){
this.name = name;
this.age = age;
this.job = job;
this.sayHi = function(){
console.log('Hello,everyBody');
}
}
var p1 = new Person('張三', 22, 'actor');
p1.sayHi(); // Hello,everyBody
console.log(p1 instanceof Person); // true,p1 是否是 Person 對象
構造函數 ,是一種特殊的函數。主要用來在建立對象時初始化對象, 即爲對象成員變量賦初始值,總與new運算符一塊兒使用在建立對象的語句中。
JavaScript中的this指向問題:
1. 函數在定義的時候 this 是不肯定的,只有在調用的時候才能夠肯定
2. 通常函數直接執行,內部 this 指向全局 window
3. 函數做爲一個對象的方法,被該對象所調用,那麼 this 指向的是該對象
4. 構造函數中的 this 實際上是一個隱式對象,相似一個初始化的模型,全部方法和屬性都掛載到了這個隱式對象身上,後續經過 new 關鍵字來調用,從而實現實例化
var obj = {};
for (var i = 0; i < 10; i++) {
obj[i] = i * 2;
} // obj[key] 直接調用,兩種方式均可以,可是沒有屬性的時候用這個
for(var key in obj) {
console.log(key + "==" + obj[key]); // key 是 obj 的鍵
} // obj.key 若是有 key 就是調用,沒有就是建立
function fun() {
this.name = 'bob';
}
var obj = new fun();
console.log(obj.name); // bob
delete obj.name;
console.log(obj.name); // undefined
function Person(name,age,salary) {
this.name = name;
this.age = age;
this.salary = salary;
}
function f1(person) {
person.name = "cccc";
person = new Person("aaaa",18,10); // 此時 person 存儲的不是 p 的地址了,是新的地址
}
var p = new Person("bbbb",18,1000);
console.log(p.name); // bbbb
f1(p);
console.log(p.name); // cccc
JSON(JavaScript Object Notation, JS 對象簡譜) 是一種輕量級的數據交換格式。它基於 ECMAScript (歐洲計算機協會制定的js規範)的一個子集,採用徹底獨立於編程語言的文本格式來存儲和表示數據。簡潔和清晰的層次結構使得 JSON 成爲理想的數據交換語言。 易於人閱讀和編寫,同時也易於機器解析和生成,並有效地提高網絡傳輸效率。
任何支持的類型均可以經過 JSON 來表示,例如字符串、數字、對象、數組等。可是對象和數組是比較特殊且經常使用的兩種類型:
JSON 鍵/值對
JSON 鍵值對是用來保存 JS 對象的一種方式,和 JS 對象的寫法也大同小異,鍵/值對組合中的鍵名寫在前面並用雙引號 "" 包裹,使用冒號 : 分隔,而後緊接着值:
{"firstName": "Json"}
等價於這條 JavaScript 語句:{firstName : "Json"}
JSON 是 JS 對象的字符串表示法,它使用文本表示一個 JS 對象的信息,本質是一個字符串。
var obj = {a: 'Hello', b: 'World'}; //這是一個對象,注意鍵名也是可使用引號包裹的
var json = '{"a": "Hello", "b": "World"}'; //這是一個 JSON 字符串,本質是一個字符串
JSON 和 JS 對象互轉:
var json = JSON.stringify({a: 'Hello', b: 'World'}); //結果是 '{"a": "Hello", "b": "World"}'
var obj = JSON.parse('{"a": "Hello", "b": "World"}'); //結果是 {a: 'Hello', b: 'World'}
JavaScript中的對象分爲3種:內置對象、瀏覽器對象(web api)、自定義對象
JavaScript 提供多個內置對象:Math/Array/Number/String/Boolean...
對象只是帶有屬性和方法的特殊數據類型。
能夠經過 MDN 查看。
Math對象不是構造函數,它具備數學常數和函數的屬性和方法,都是以靜態成員的方式提供。跟數學相關的運算來找Math中的成員(求絕對值,取整)
console.log(Math.PI); // 3.141592653589793
console.log(Math.abs(null)); // 0
console.log(Math.abs(undefined)); // NaN
console.log(Math.ceil(10.33);) // 11
Math.floor(10.9999); // 10
Math.max(10,20,3,50,-12); // 50
Math.min(10,-5,60,20); // -5
Math.pow(2,3); // 8
Math.fround(1.36498); // 1.3649799823760986
Math.random(); // 僞隨機數在範圍 [0,1),包括0,可是不包括1。
Math.round(20.5514654); // 21
Math.sign(-256); // -1
Math.sqrt(9); // 3
Date 對象基於1970年1月1日(世界標準時間)起的毫秒數。
var utcDate1 = new Date(Date.UTC(96, 1, 2, 3, 4, 5));
console.log(utcDate1.toUTCString()); // Fri, 02 Feb 1996 03:04:05 GMT
Date.now(); // 1547013241828
Date.parse('01 Jan 1970 00:00:00 GMT'); // 0
var birthday = new Date('August 19, 1975 23:15:30');
birthday.getDate(); // 19
birthday.getDay(); // 2 一週的第幾天,0 表示星期天。
birthday.getFullYear(); // 1975
birthday.getHours(); // 23
birthday.getMinutes(); // 15
birthday.getMonth(); // 7返回指定的日期對象的月份,0表示一月
birthday.getSeconds(); // 30
birthday.getTime(); // 177693330000,返回一個時間的格林威治時間數值。
birthday.toDateString(); // "Tue Aug 19 1975"
birthday.toString(); // "Tue Aug 19 1975 23:15:30 GMT+0800 (中國標準時間)"
birthday.toJSON(); // "1975-08-19T15:15:30.000Z"
birthday.toLocaleDateString(); // "1975/8/19"
String 全局對象是一個用於字符串或一個字符序列的構造函數。
var x = "Mozilla";
x.length; // 7
x.charAt(1); // o
x.charCodeAt(1); // 111,字符的 UTF-16 代碼單元值的數字
x.codePointAt(1); // 111 返回 一個 Unicode 編碼點值的非負整數。
x.concat(",Hello ","world!"); // "Mozilla,Hello world!"
x.endsWith("lla"); // true
x.indexOf("o"); // 1
x.lastIndexOf("l"); // 5 返回指定值在字符串中最後出現的位置,0開始\
x.match(/[a-lA-L]/gi); // (4) ["i", "l", "l", "a"]
x.search(/[a-lA-L]/gi); // 3 第一次出現的索引
x.repeat(3); // "MozillaMozillaMozilla"
x.replace(/[a-lA-L]/gi, "???"); // "Moz????????????"
x.slice(2,4); // "zi"
x.split(""); // (7) ["M", "o", "z", "i", "l", "l", "a"]
x.startsWith("M"); // true
x.substring(3,0); // "Moz"
x.toLocaleLowerCase(); // "mozilla"
x.toLocaleUpperCase(); // "MOZILLA"
x.toLowerCase(); // "mozilla"
x.toUpperCase(); // "MOZILLA"
var y = " w h a t ";
y.trim(); // "w h a t"
y.trimLeft(); // "w h a t "
y.trimRight(); // " w h a t"
var z = new String("mozilla"); typeof z; // "object"
typeof z.indexOf(); // "number"
z.indexOf("i"); // 3
"aacsac".localeCompare("bbdasd"); // -1
"bbasdas".localeCompare("aacvadsfa"); // 1
String.fromCharCode(0x404); // "Є" 返回Unicode值序列建立的字符串。
String.fromCodePoint(0x404); // "\u0404" 使用 Unicode 編碼建立的字符串。
JavaScript 的 Array 對象是用於構造數組的全局對象,數組相似與列表的高階對象。
var fruits = ['Apple', 'Banana'];
fruits.length; // 2
Array.from(fruits); // (2) ["Apple", "Banana"]
Array.isArray(fruits); // true
Array.of(7); // [7]
Array(7); // (7) [empty × 7]
fruits.concat("Strawberry"); // (3) ["Apple", "Banana", "Strawberry"]
var array1 = [1, 2, 3, 4];
console.log(array1.fill(0, 2, 4)); // [1, 2, 0, 0]
var filtered = [12, 5, 8, 130, 44].filter(function (element) {
return element >= 10;
}); // (3) [12, 130, 44]
fruits.find(function (e){ return e == "Banana";}); // "Banana"
fruits.findIndex(function (e){ return e == "Banana";}); // 1
fruits.forEach(function(e){ console.log(e);}); // Apple Banana
fruits.includes("Banana"); // true
fruits.indexOf("Banana"); // 1
fruits.keys(); // Array Iterator {}
for(let key of fruits.keys()){ console.log(key);}; // 0 1
fruits.map(function(e) { return e + "Pen";}); // (2) ["ApplePen", "BananaPen"]
fruits.pop(); // "Banana"
fruits.push("Banana","Strawberry"); // (3) ["Apple", "Banana", "Strawberry"]
[0, 1, 2, 3, 4].reduce(function(accumulator, currentValue, currentIndex, array){
return accumulator + currentValue;
}); // 0 + 1 + 2 + 3 + 4 10
fruits.reverse(); // (3) ["Strawberry", "Banana", "Apple"]
fruits.shift(); // "Strawberry"
fruits.unshift("Strawberry"); // 3 (3) ["Strawberry", "Banana", "Apple"]
fruits.slice(0,2); // (2) ["Strawberry", "Banana"]
fruits.sort(function (a,b){ return a>b;}); // (3) ["Apple", "Banana", "Strawberry"]
var months = ['Jan', 'March', 'April', 'June'];
months.splice(1, 0, 'Feb'); // ['Jan', 'Feb', 'March', 'April', 'June']
months.splice(4, 1, 'May'); // ['Jan', 'Feb', 'March', 'April', 'May']