摘要:例如,表示以上未涉及到的其他對象,例如,表示全局變量,例如,道格拉斯的方法等同于方法
JS常用方法函數
字符串長度截取
惰性求值
閉包
基本包裝類型(包裝對象)
對象遍歷(最佳方法)
數組遍歷(內置方法)
怎么判斷一個object是否是數組(array)?
加法操作表
排序方法
前綴規范
道格拉斯的object方法(等同于object.create方法)
1. 字符串長度截取function cutstr(str, len) { var temp, icount = 0, patrn = /[^x00-xff]/, strre = ""; for (var i = 0; i < str.length; i++) { if (icount < len - 1) { temp = str.substr(i, 1); if (patrn.exec(temp) === null) { icount += 1; } else { icount += 2; } strre += temp; } else { break; } } return strre + "..."; }2. 惰性求值
const range = function* (from, to) { for (let i = from; i < to; i++) { console.log("range ", i); yield i; } }; const map = function* (flow, transform) { for (const data of flow) { console.log("map ", data); yield (transform(data)); } }; const filter = function* (flow, condition) { for (const data of flow) { console.log("filter ", data); if (condition(data)) { yield data; } } }; const stop = function* (flow, condition) { for (const data of flow) { yield data; if (condition(data)) { break; } } }; const take = function (flow, num) { let count = 0; const _filter = function (data) { count++; return count >= num; }; return stop(flow, _filter); }; class _Lazy { constructor() { this.iterator = null; } range(...args) { this.iterator = range(...args); return this; } map(...args) { this.iterator = map(this.iterator, ...args); return this; } filter(...args) { this.iterator = filter(this.iterator, ...args); return this; } take(...args) { this.iterator = take(this.iterator, ...args); return this; } [Symbol.iterator]() { return this.iterator; } } function lazy() { return new _Lazy(); } const nums = lazy().range(0, 100).map(n => n * 10).filter(n => n % 3 === 0).take(2); for (let n of nums) { console.log("num: ", n, " "); }3. 閉包
const Greeters = []; //方法一 for (let i = 0; i < 10; i++) { Greeters.push(function () { return console.log(i); }) } //方法二 for (var i = 0; i < 10; i++) { Greeters.push(console.log.bind(null, i)) } Greeters[0]();//0 Greeters[1]();//1 Greeters[2]();//24. 惰性求值
var s1 = "hello world"; var s2 = s1.substr(4);
ECMAScript還提供了三個特殊的引用類型Boolean,String,Number。我們稱這三個特殊的引用類型為基本包裝類型,也叫包裝對象。
也就是說當讀取string,boolean和number這三個基本數據類型的時候,后臺就會創建一個對應的基本包裝類型對象,從而讓我們能夠調用一些方法來操作這些數據。
所以當第二行代碼訪問s1的時候,后臺會自動完成下列操作:
創建String類型的一個實例;// var s1 = new String(“helloworld”);
在實例上調用指定方法;// var s2 = s1.substr(4);
銷毀這個實例;// s1 = null;
正因為有第三步這個銷毀的動作,所以你應該能夠明白為什么基本數據類型不可以添加屬性和方法,這也正是基本裝包類型和引用類型主要區別:對象的生存期。
使用new操作符創建的引用類型的實例,在執行流離開當前作用域之前都是一直保存在內存中。而自動創建的基本包裝類型的對象,則只存在于一行代碼的執行瞬間,然后立即被銷毀。
5. 對象遍歷(最佳方法)//為 Object 設置三個自定義屬性(可枚舉) Object.prototype.userProp = "userProp"; Object.prototype.getUserProp = function () { return Object.prototype.userProp; }; //定義一個對象,隱式地繼承自 Object.prototype var obj = { name: "percy", age: 21, [Symbol("symbol 屬性")]: "symbolProp", unEnumerable: "我是一個不可枚舉屬性", skills: ["html", "css", "js"], getSkills: function () { return this.skills; } }; //設置 unEnumerable 屬性為不可枚舉屬性 Object.defineProperty(obj, "unEnumerable", { enumerable: false }); //利用 Object.create() 新建一個對象,并且這個對象沒有任何原型鏈 var obj2 = Object.create(null, { name: {value: "percy"}, age: {value: 21}, skills: {value: ["html", "css", "js"]} }); /* * 針對上面的情況,我們用一個更完善的解決方案來解決。 * 使用 Object.prototype.hasOwnProperty.call(obj,’prop’…) * */ Object.prototype.hasOwnProperty.call(obj2, "name");//true Object.prototype.hasOwnProperty.call(obj2, "skills");//true Object.prototype.hasOwnProperty.call(obj2, "userProp");//false6. 數組遍歷(內置方法)
Array.prototype.forEach(): 對數組的每個元素執行一次提供的函數
//如果數組在迭代時被修改了,則按照索引繼續遍歷修改后的數組 var words = ["one", "two", "three", "four"]; words.forEach(function (word) { console.log(word); if (word === "two") { words.shift(); } });
Array.prototype.map(): 返回一個新數組,每個元素都是回調函數返回的值
// map 的一個坑 [1,2,3].map(parseInt);//[1, NaN, NaN]
一些有用的數組內置方法
Array.prototype.every(callback[,thisArg]): 測試數組的各個元素是否通過了回調函數的測試,若都通過,返回 true,否則返回 false(說得本質點兒,就是如果回調函數每次返回的值都是 true 的話,則 every() 返回 true,否則為 false)
Array.prototype.filter(callback[,thisArg]): 返回一個新數組,數組的元素是原數組中通過測試的元素(就是回調函數返回 true 的話,對應的元素會進入新數組)
Array.prototype.find(callback[,thisArg]): 返回第一個通過測試的元素
Array.prototype.findIndex(callback[,thisArg]): 與上面函數類似,只不過這個是返回索引
Array.prototype.some(callback[,thisArg]): 類似 find() ,只不過它不返回元素,只返回一個布爾值。只要找到一個通過測試的,就返回 true
Array.prototype.reduce(callback,[initialValue]): 習慣性稱之為累加器函數,對數組的每個元素執行回調函數,最后返回一個值(這個值是最后一次調用回調函數時返回的值)
這個函數的回調函數有 4 個參數
accumulator: 上一次調用回調函數返回的值
currentValue: 當前在處理的值
currentIndex
array
initialValue: 可選項,其值用于第一次調用 callback 的第一個參數
Array.prototype.reduceRight(callback[, initialValue]): 用法和上面的函數一樣,只不過遍歷方向正好相反
7. 怎么判斷一個object是否是數組(array)總結一下上面這些函數的共性
都是通過每次的回調函數的返回值進行邏輯操作或判斷的
回調函數都可以寫成更簡潔的箭頭函數(推薦)
都可以通過形如 Array.prototype.map.call(str,callback) 的方式來操作字符串
方法一:使用 Object.prototype.toString 來判斷是否是數組
function isArray(obj) { return Object.prototype.toString.call(obj) === "[object Array]"; }
這里使用call來使 toString 中 this 指向 obj,進而完成判斷。
方法二:使用 原型鏈 來完成判斷
function isArray(obj) { return obj.__proto__ === Array.prototype; }
基本思想是利用實例如果是某個構造函數構造出來的,那么它的 __proto__ 是指向構造函數的 prototype 屬性。
方法三:利用 JQuery
function isArray(obj){ return $.isArray(obj) }
JQuery isArray 的實現其實就是方法一。
8. 加法操作表Number + Number -> 加法
Boolean + Number -> 加法
Boolean + Boolean -> 加法
Number + String -> 連接
String + Boolean -> 連接
String + String -> 連接
9. 排序方法冒泡排序
function bubbleSort(arr) { var len = arr.length; for (var i = 0; i < len - 1; i++) { for (var j = 0; j < len - 1 - i; j++) { if (arr[j] > arr[j + 1]) { var temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } return arr; }
選擇排序
首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置
再從剩余未排序元素中繼續尋找最小(大)元素,然后放到已排序序列的末尾
重復第二步,直到所有元素均排序完畢
function selectionSort(arr) { var len = arr.length, minIndex, temp; for (var i = 0; i < len - 1; i++) { minIndex = i; for (var j = i + 1; j < len; j++) { if (arr[j] < arr[minIndex]) { minIndex = j; } } temp = arr[i]; arr[i] = arr[minIndex]; arr[minIndex] = temp; } return arr; }
插入排序
首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置
從頭到尾依次掃描未排序序列,將掃描到的每個元素插入有序序列的適當位置。(如果待插入的元素與有序序列中的某個元素相等,則將待插入元素插入到相等元素的后面。)
function insertionSort(arr) { var len = arr.length, preIndex, current; for (var i = 1; i < len; i++) { preIndex = i - 1; current = arr[i]; while (preIndex >= 0 && arr[preIndex] > current) { arr[preIndex + 1] = arr[preIndex]; preIndex--; } arr[preIndex + 1] = current; } return arr; }
歸并排序
基本原理是分治法,就是分開并且遞歸來排序。
申請空間,使其大小為兩個已經排序序列之和,該空間用來存放合并后的序列;
設定兩個指針,最初位置分別為兩個已經排序序列的起始位置;
比較兩個指針所指向的元素,選擇相對小的元素放入到合并空間,并移動指針到下一位置;
重復步驟 3 直到某一指針達到序列尾;
將另一序列剩下的所有元素直接復制到合并序列尾。
function insertionSort(arr) { var len = arr.length, preIndex, current; for (var i = 1; i < len; i++) { preIndex = i - 1; current = arr[i]; while (preIndex >= 0 && arr[preIndex] > current) { arr[preIndex + 1] = arr[preIndex]; preIndex--; } arr[preIndex + 1] = current; } return arr; }10. 前綴規范
每個局部變量都需要有一個類型前綴,按照類型可以分為:
s:表示字符串。例如:sName,sHtml;11. 道格拉斯的object方法(等同于object.create方法)
n:表示數字。例如:nPage,nTotal;
b:表示邏輯。例如:bChecked,bHasLogin;
a:表示數組。例如:aList,aGroup;
r:表示正則表達式。例如:rDomain,rEmail;
f:表示函數。例如:fGetHtml,fInit;
o:表示以上未涉及到的其他對象,例如:oButton,oDate;
g:表示全局變量,例如:gUserName,gLoginTime;
function object(o) { var F = function () { }; F.prototype = o; return new F(); }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/89029.html
摘要:基本概念學習目標學會如何使用,掌握的常用,能夠使用實現常見的效果。想要實現簡單的動畫效果,也很麻煩代碼冗余。實現動畫非常簡單,而且功能更加的強大。注意選擇器返回的是對象。 jQuery基本概念 學習目標:學會如何使用jQuery,掌握jQuery的常用api,能夠使用jQuery實現常見的效果。 為什么要學習jQuery? 【01-讓div顯示與設置內容.html】 使用javasc...
摘要:基本概念學習目標學會如何使用,掌握的常用,能夠使用實現常見的效果。想要實現簡單的動畫效果,也很麻煩代碼冗余。實現動畫非常簡單,而且功能更加的強大。注意選擇器返回的是對象。 jQuery基本概念 學習目標:學會如何使用jQuery,掌握jQuery的常用api,能夠使用jQuery實現常見的效果。 為什么要學習jQuery? 【01-讓div顯示與設置內容.html】 使用javasc...
摘要:基本概念學習目標學會如何使用,掌握的常用,能夠使用實現常見的效果。想要實現簡單的動畫效果,也很麻煩代碼冗余。實現動畫非常簡單,而且功能更加的強大。注意選擇器返回的是對象。 jQuery基本概念 學習目標:學會如何使用jQuery,掌握jQuery的常用api,能夠使用jQuery實現常見的效果。 為什么要學習jQuery? 【01-讓div顯示與設置內容.html】 使用javasc...
摘要:基本概念學習目標學會如何使用,掌握的常用,能夠使用實現常見的效果。想要實現簡單的動畫效果,也很麻煩代碼冗余。實現動畫非常簡單,而且功能更加的強大。注意選擇器返回的是對象。 jQuery基本概念 學習目標:學會如何使用jQuery,掌握jQuery的常用api,能夠使用jQuery實現常見的效果。 為什么要學習jQuery? 【01-讓div顯示與設置內容.html】 使用javasc...
etools 常用js函數整理 安裝和使用 使用npm安裝:npm install -s etools通過es6模塊引入,如import _ from etools;console.log(_.extend(true,{},{age:23})); 下載并在頁面引入etools.js直接調用ETool對象中得方法,如console.log(ETools.extend(true,{},{age:2...
摘要:是一個的核心模塊,提供常用函數的集合,用于彌補核心的功能過于精簡的不足。是一個將任意對象轉換為字符串的方法,通常用于調試和錯誤輸出。用于判斷是否為正則表達式,是返回,否則返回。 講講node常用工具util。 util是一個Node.js的核心模塊,提供常用函數的集合,用于彌補核心Javascript的功能過于精簡的不足。 util.inherits(constructor, supe...
閱讀 1686·2021-09-22 10:02
閱讀 1931·2021-09-02 15:40
閱讀 2835·2019-08-30 15:55
閱讀 2243·2019-08-30 15:44
閱讀 3593·2019-08-30 13:18
閱讀 3224·2019-08-30 11:00
閱讀 1945·2019-08-29 16:57
閱讀 564·2019-08-29 16:41