摘要:前端培訓初級階段語法變量值類型運算符語句上節的基礎內容知識,這節我們會用到。這意味著開發者不必明確實例化內置對象,它已被實例化了。不進行有效性檢查。對象是自年月日起經過的毫秒數。
前端最基礎的就是 HTML+CSS+Javascript。掌握了這三門技術就算入門,但也僅僅是入門,現在前端開發的定義已經遠遠不止這些。前端小課堂(HTML/CSS/JS),本著提升技術水平,打牢基礎知識的中心思想,我們開課啦(每周四)。
該文為前端培訓-初級階段(13、18)的補充內容 (介紹了 ECMAScript 歷史,ES6 常用點)。
本文介紹ECMAScript基礎知識。
前端培訓-初級階段(13) - ECMAScript (語法、變量、值、類型、運算符、語句)
上節的基礎內容知識,這節我們會用到。默認已讀。
ECMAScript 基礎對象(Object、Boolean、Number、String)
常用內置對象(Date、Array、Math、RegExp、global、Function、Event、arguments、JSON)
ECMAScript 函數(聲明、調用、返回值、閉包、遞歸)
ECMAScript 基礎對象在 ECMAScript 中,所有對象并非同等創建的。
一般來說,可以創建并使用的對象有三種:本地對象、內置對象和宿主對象。
ECMA-262 把本地對象(native object)定義為“獨立于宿主環境的 ECMAScript 實現提供的對象”。簡單來說,本地對象就是 ECMA-262 定義的類(引用類型)。它們包括:Object、Function、Array、String、Boolean、Number、Date、RegExp、Error、EvalError、RangeError、ReferenceError、SyntaxError、TypeError、URIError
ECMA-262 把內置對象(built-in object)定義為“由 ECMAScript 實現提供的、獨立于宿主環境的所有對象,在 ECMAScript 程序開始執行時出現”。這意味著開發者不必明確實例化內置對象,它已被實例化了。ECMA-262 只定義了兩個內置對象,即 Global 和 Math (它們也是本地對象,根據定義,每個內置對象都是本地對象)。
所有非本地對象都是宿主對象(host object),即由 ECMAScript 實現的宿主環境提供的對象。所有 BOM 和 DOM 對象都是宿主對象。Object 對象
Object 是所有對象的基礎。JavaScript 中的所有對象都來自 Object ;所有對象從 Object.prototype 繼承方法和屬性,盡管它們可能被覆蓋。例如,其他構造函數的原型將覆蓋 constructor 屬性并提供自己的 toString() 方法。Object 原型對象的更改將傳播到所有對象,除非受到這些更改的屬性和方法將沿原型鏈進一步覆蓋。
類型 | key | 用法 | 作用 |
---|---|---|---|
屬性 | length | Object.length | Object.length 值為1 |
屬性 | prototype | Object.prototype | 可以為所有 Object 類型的對象添加屬性 |
方法 | assign | Object.assign() | 通過復制一個或多個對象來創建一個新的對象 |
方法 | create | Object.create() | 使用指定的原型對象和屬性創建一個新對象 |
方法 | defineProperty | Object.defineProperty() | 給對象添加一個屬性并指定該屬性的配置 |
方法 | defineProperties | Object.defineProperties() | 給對象添加多個屬性并分別指定它們的配置 |
方法 | entries | Object.entries() | 返回給定對象自身可枚舉屬性的[key, value]數組 |
方法 | freeze | Object.freeze() | 凍結對象:其他代碼不能刪除或更改任何屬性 |
方法 | getOwnPropertyDescriptor | Object.getOwnPropertyDescriptor() | 返回對象指定的屬性配置 |
方法 | getOwnPropertyNames | Object.getOwnPropertyNames() | 返回一個數組,它包含了指定對象所有的可枚舉或不可枚舉的屬性名 |
方法 | getOwnPropertySymbols | Object.getOwnPropertySymbols() | 返回一個數組,它包含了指定對象自身所有的符號屬性 |
方法 | getPrototypeOf | Object.getPrototypeOf() | 返回指定對象的原型對象 |
方法 | is | Object.is() | 比較兩個值是否相同。所有 NaN 值都相等(這與==和===不同) |
方法 | isExtensible | Object.isExtensible() | 判斷對象是否可擴展 |
方法 | isFrozen | Object.isFrozen() | 判斷對象是否已經凍結 |
方法 | isSealed | Object.isSealed() | 判斷對象是否已經密封 |
方法 | keys | Object.keys() | 返回一個包含所有給定對象自身可枚舉屬性名稱的數組 |
方法 | preventExtensions | Object.preventExtensions() | 防止對象的任何擴展 |
方法 | seal | Object.seal() | 防止其他代碼刪除對象的屬性 |
方法 | setPrototypeOf | Object.setPrototypeOf() | 設置對象的原型(即內部[[Prototype]]屬性) |
方法 | values | Object.values() | 返回給定對象自身可枚舉值的數組 |
原型屬性 | ([]).constructor === Array | Object.prototype.constructor | 特定的函數,用于創建一個對象的原型 |
原型屬性 | ([]).__proto__ === Array.prototype | Object.prototype.__proto__ | 指向當對象被實例化的時候,用作原型的對象 |
原型方法 | Object.prototype.hasOwnProperty() | 返回一個布爾值 ,表示某個對象是否含有指定的屬性,而且此屬性非原型鏈繼承的 | |
原型方法 | Object.prototype.isPrototypeOf() | 返回一個布爾值,表示指定的對象是否在本對象的原型鏈中 | |
原型方法 | Object.prototype.propertyIsEnumerable() | 判斷指定屬性是否可枚舉 | |
原型方法 | Object.prototype.toLocaleString() | 直接調用 toString()方法 | |
原型方法 | Object.prototype.toString() | 返回對象的字符串表示 | |
原型方法 | Object.prototype.valueOf() | 返回指定對象的原始值 |
這個對象非常的簡單。只有從Object哪里基礎來的方法和屬性。當做函數調用,就是把值轉換成布爾類型
如果第一個參數不是布爾值,則會將其轉換為布爾值。如果省略該參數,或者其值為 0、-0、null、false、NaN、undefined、或者空字符串(""),則生成的 Boolean 對象的值為 false。如果傳入的參數是 DOM 對象 document.all,也會生成值為 false 的 Boolean 對象。任何其他的值,包括值為 "false" 的字符串和任何對象,都會創建一個值為 true 的 Boolean 對象。
注意不要將基本類型中的布爾值 true 和 false 與值為 true 和 false 的 Boolean 對象弄混了。
當 Boolean 對象用于條件語句的時候(譯注:意為直接應用于條件語句),任何不是 undefined 和 null 的對象,包括值為 false 的 Boolean 對象,都會被當做 true 來對待。例如,下面 if 語句中的條件為真:
var x = new Boolean(false); if (x) { console.log(typeof x, typeof true, typeof false) }Number 對象
類型 | key | 用法 | 作用 |
---|---|---|---|
屬性 | EPSILON | Number.EPSILON | 兩個可表示(representable)數之間的最小間隔 |
屬性 | MAX_SAFE_INTEGER | Number.MAX_SAFE_INTEGER | JavaScript 中最大的安全整數 (253 - 1) |
屬性 | MAX_VALUE | Number.MAX_VALUE | 能表示的最大正數。最小的負數是 -MAX_VALUE |
屬性 | MIN_SAFE_INTEGER | Number.MIN_SAFE_INTEGER | JavaScript 中最小的安全整數 (-(253 - 1)) |
屬性 | MIN_VALUE | Number.MIN_VALUE | 能表示的最小正數即最接近 0 的正數 (實際上不會變成 0)。最大的負數是 -MIN_VALUE |
屬性 | NaN | Number.NaN | 特殊的“非數字”值 |
屬性 | NEGATIVE_INFINITY | Number.NEGATIVE_INFINITY | 特殊的負無窮大值,在溢出時返回該值 |
屬性 | POSITIVE_INFINITY | Number.POSITIVE_INFINITY | 特殊的正無窮大值,在溢出時返回改值 |
屬性 | prototype | Number.prototype | Number 對象上允許的額外屬性 |
方法 | isNaN | Number.isNaN() | 確定傳遞的值是否是 NaN |
方法 | isFinite | Number.isFinite() | 確定傳遞的值類型及本身是否是有限數 |
方法 | isInteger | Number.isInteger() | 確定傳遞的值類型是“number”,且是整數 |
方法 | isSafeInteger | Number.isSafeInteger() | 確定傳遞的值是否為安全整數 ( -(253 - 1) 至 253 - 1之間) |
方法 | toInteger | Number.toInteger() | 計算傳遞的值并將其轉換為整數 (或無窮大) |
方法 | parseFloat | Number.parseFloat() | 和全局對象 parseFloat() 一樣 |
方法 | parseInt | Number.parseInt() | 和全局對象 parseInt() 一樣 |
原型方法 | toExponential | Number.prototype.toExponential() | 返回以科學計數法表示的數字字符串 |
原型方法 | toFixed | Number.prototype.toFixed() | 返回固定小數位的數字字符串(四拾伍入) |
原型方法 | toLocaleString | Number.prototype.toLocaleString() | 返回以本地語言為主的數字字符串。會覆蓋 Object.prototype.toLocaleString()。 |
原型方法 | toPrecision | Number.prototype.toPrecision() | 返回固定位數表示的數字字符串(小數點不記位,四拾伍入、位數不夠會返回科學計數法) |
原型方法 | toString | Number.prototype.toString() | 返回以指定基數表示的數字字符串。會覆蓋 Object.prototype.toString() |
原型方法 | valueOf | Number.prototype.valueOf() | 返回以原始數值。會覆蓋 Object.prototype.valueOf() |
類型 | key | 用法 | 作用 |
---|---|---|---|
屬性 | length | "".length | 返回文字長度 |
方法 | String.fromCharCode() | String.fromCharCode(97) == "A" | 通過 一系列UTF-16代碼單元的數字。 范圍介于0到65535(0xFFFF)之間。 大于0xFFFF的數字將被截斷。 不進行有效性檢查。 創建字符串 |
方法 | String.fromCodePoint() | String.fromCodePoint(65,97) == "Aa" | 通過Unicode創建字符串 |
原型方法 | charAt() | "李li".charAt(1) == "l" | 返回特定位置的字符 |
原型方法 | charCodeAt() | "李li".charCodeAt(0) == 26446 | 返回表示給定索引的字符的Unicode的值 |
原型方法 | codePointAt() | "李li".codePointAt(0) == 26446 | 返回表示給定索引的字符的Unicode的值 |
原型方法 | concat() | "l".concat("i") == "li" | 連接兩個字符串文本,并返回一個新的字符串 |
原型方法 | includes() | "li".includes("i") | 判斷一個字符串里是否包含其他字符串 |
原型方法 | endsWith() | "li".endsWith("i") | 判斷一個字符串的結尾是否包含其他字符串中的字符 |
原型方法 | indexOf() | "li".indexOf("i") | 從字符串對象中返回首個被發現的給定值的索引值,如果沒有找到則返回-1 |
原型方法 | lastIndexOf() | "li".lastIndexOf("i") | 從字符串對象中返回最后一個被發現的給定值的索引值,如果沒有找到則返回-1 |
原型方法 | localeCompare() | 返回一個數字表示是否引用字符串在排序中位于比較字符串的前面,后面,或者二者相同 | |
原型方法 | match() | "onmousemove".match(/on(w+)/) | 使用正則表達式與字符串相比較 |
原型方法 | normalize() | 返回調用字符串值的Unicode標準化形式 | |
原型方法 | padEnd() | "1".padEnd(5, " ") | 在當前字符串尾部填充指定的字符串, 直到達到指定的長度。 返回一個新的字符串 |
原型方法 | padStart() | "1".padStart(5, "0") | 在當前字符串頭部填充指定的字符串, 直到達到指定的長度。 返回一個新的字符串 |
原型方法 | repeat() | "*".repeat(10) | 返回指定重復次數的由元素組成的字符串對象 |
原型方法 | replace() | "李?".replace("?","**") | 被用來在正則表達式和字符串直接比較,然后用新的子串來替換被匹配的子串 |
原型方法 | search() | "李?".search("?") | 對正則表達式和指定字符串進行匹配搜索,返回第一個出現的匹配項的下標 |
原型方法 | slice() | "李**".slice(0,2) | 摘取一個字符串區域,返回一個新的字符串 |
原型方法 | split() | "a,b,123,f".split(",") | 通過分離字符串成字串,將字符串對象分割成字符串數組 |
原型方法 | startsWith() | 判斷字符串的起始位置是否匹配其他字符串中的字符 | |
原型方法 | substr() | 通過指定字符數返回在指定位置開始的字符串中的字符 | |
原型方法 | substring() | 返回在字符串中指定兩個下標之間的字符 | |
原型方法 | toLocaleLowerCase() | 根據當前區域設置,將符串中的字符轉換成小寫。對于大多數語言來說,toLowerCase的返回值是一致的 | |
原型方法 | toLocaleUpperCase() | 根據當前區域設置,將字符串中的字符轉換成大寫,對于大多數語言來說,toUpperCase的返回值是一致的 | |
原型方法 | toLowerCase() | 將字符串轉換成小寫并返回 | |
原型方法 | toSource() | 返回一個對象文字代表著特定的對象。你可以使用這個返回值來創建新的對象。重寫 Object.prototype.toSource 方法 | |
原型方法 | toString() | 返回用字符串表示的特定對象。重寫 Object.prototype.toString 方法 | |
原型方法 | toUpperCase() | 將字符串轉換成大寫并返回 | |
原型方法 | trim() | " 1 ".trim() | 從字符串的開始和結尾去除空格。參照部分 ECMAScript 5 標準 |
原型方法 | trimStart()trimLeft() | " 1 ".trimStart() | 從字符串的左側去除空格 |
原型方法 | trimEnd()trimRight() | " 1 ".trimEnd() | 從字符串的右側去除空格 |
原型方法 | valueOf() | 返回特定對象的原始值。重寫 Object.prototype.valueOf 方法 |
這個我就直接說常用的了。
DateDate 對象是自1970年1月1日(UTC)起經過的毫秒數。
實例化方式
new Date();//當前時間 new Date(Number);//傳入的毫秒數轉換成時間 new Date(dateString);//傳入的時間格式轉換為時間。這里有一些坑(低版本IE、ios、chrome)實現的規范不一樣,導致有的格式解析不出來,可以用[momentjs][3]。 new Date(year, monthIndex [, day [, hours [, minutes [, seconds [, milliseconds]]]]]);
注意:只能將 Date 作為構造函數調用,才能實例化(instantiate) Date 對象:若將它作為常規函數調用(即不加 new 操作符),則將會返回一個字符串,而非 Date 對象。另外,不像其他的 JavaScript 對象類型,Date 對象沒有字面量語法(literal syntax)。
方法
Date.now() 返回自 1970-1-1 00:00:00 UTC(世界標準時間)至今所經過的毫秒數。
等效寫法+new Date(),new Date().getTime()
Date.parse() 解析一個表示日期的字符串,并返回從 1970-1-1 00:00:00 所經過的毫秒數。
Date.UTC() 接受和構造函數最長形式的參數相同的參數(從2到7),并返回從 1970-01-01 00:00:00 UTC 開始所經過的毫秒數。
原型方法
getDay()周,getFullYear()年,getMonth()月,getDate()日,getHours()時,getMinutes()分,getSeconds()秒
getTimezoneOffset() 返回當前時區的時區偏移。
set方法同上,需要注意的地方有setHours()可以把時分秒毫秒都設置了
ArrayArray數組對象的forEach、map、filter、reduce
join 合并成串
concat 合并其他數組
slice 分割數組
Math
Math.random() 隨機數。來個公式(end-start+1)*num+start
比如 60-90區間內(90-60+1)*Math.random()+60>>0即可得到區間內整數
Math.ceil 向上取整Math.ceil(5.1)
Math.floor 向下取整Math.floor(1.9)
Math.round 四拾伍入Math.round(2.3)
Math.pow Math.pow(3,5)等同于3**5,但是前者兼容更好
RegExp原生的方法其實很少用。需要注意的地方是,有部分函數會記錄上次差到的點。一般都是用字符串的 replace 和 match
JSON低版本 IE 沒有。需要使用 eval。
提供了 JSON.stringify 和 JSON.parse()用來序列化與反序列化
//提供一個tips,你可以在控制臺試試喲。 JSON.stringify([{ userid: 7848950, nickname: "abc" },{ userid: 920110633, nickname: "abc" },{ userid: 7848952, nickname: "abc" }], null, " ")ECMAScript 函數(聲明、調用、返回值、閉包、遞歸) 函數聲明
函數聲明 function fun(){}
函數表達式 fun = function fun(){}
IFFE void function(){console.log(1)}()
構造函數 new Function("a","b","return a+b")(1,2)
函數調用function fun(){console.log(1)};fun() 通過括號來調用
返回值function fun(){return 1};console.log(fun()) 函數內部通過return來返回
閉包什么是作用域
作用域(scope)指的是變量存在的范圍。 在 es5 中的,Javascript 只有兩種作用域:一種是全局作用域,變量在整個程序中一直存在,所有地方都可以讀??;另一種是函數作用域,變量只在函數內部存在。(es6中又新增了塊級作用域)全局作用域可以在代碼的任何地方都能被訪問。
什么是作用域鏈
是指作用域生成的路徑。當代碼在一個執行環境中執行時,就會創建一個作用域鏈。我們有可能兩個 function 內都使用了 state 這個變量,我們不希望他共享,他被限制在了自己的作用域中。
內部環境可以通過作用域鏈訪問所有外部環境,但是外部環境不能訪問內部環境中的任何變量和函數。
在 js 中與作用域鏈相似的有原型鏈
那么什么是閉包呢?
閉包就是依賴這個特性,思考如下代碼。可以讓我們的代碼和外部環境隔離。
var getNum = (function(){ var sum = 0;//閉包中的變量 return function(){ return ++sum//內部可以訪問 } })() getNum();//1,這里可以獲取調用次數 sum = 1000;//這里改變的其實是全局的,因為他拿不到閉包內的sum getNum();//2,這里可以獲取調用次數回調函數
有的教程里面叫高階函數,思考如下代碼
[1,2,3].map(v=>v*2);//map就是一個高階函數,通過把回調傳遞進去。對原數組進行操作。遞歸函數
這個主要是用來沒有預期的情況。比如遍歷一顆樹。你不知道要循環多少次?;蛘哒f當前有個dom節點,你需要找到他的一個父級.editor_main。
//求菲波那切數列 function factorial(num){ if(num <= 1){ return 1 }else { return num * factorial(num - 1); } }后記
主講人的講稿地址
這里也要吐槽一下自己,斷更這么久,實在是太忙了。
JavaScript 標準庫
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/109363.html
摘要:提供了與瀏覽器窗口進行交互的對象標簽之間不會共享。用于描述當前瀏覽器的歷史記錄。表示窗口是否以全屏顯示。 前端最基礎的就是 HTML+CSS+Javascript。掌握了這三門技術就算入門,但也僅僅是入門,現在前端開發的定義已經遠遠不止這些。前端小課堂(HTML/CSS/JS),本著提升技術水平,打牢基礎知識的中心思想,我們開課啦(每周四)。 前面我們已經基本掌握常規的語法語義,以及基...
摘要:提供了與瀏覽器窗口進行交互的對象標簽之間不會共享。用于描述當前瀏覽器的歷史記錄。表示窗口是否以全屏顯示。 前端最基礎的就是 HTML+CSS+Javascript。掌握了這三門技術就算入門,但也僅僅是入門,現在前端開發的定義已經遠遠不止這些。前端小課堂(HTML/CSS/JS),本著提升技術水平,打牢基礎知識的中心思想,我們開課啦(每周四)。 前面我們已經基本掌握常規的語法語義,以及基...
摘要:前端培訓初級階段語法變量值類型運算符語句前端培訓初級階段內置對象函數前端培訓初級階段類模塊繼承基礎內容知識我們會用到。 前端最基礎的就是 HTML+CSS+Javascript。掌握了這三門技術就算入門,但也僅僅是入門,現在前端開發的定義已經遠遠不止這些。前端小課堂(HTML/CSS/JS),本著提升技術水平,打牢基礎知識的中心思想,我們開課啦(每周四)。 該文為前端培訓-初級階段(1...
摘要:文檔對象模型是和文檔的編程接口文檔對象模型將頁面與到腳本或編程語言連接起來。通常是指,但將或文檔建模為對象并不是語言的一部分。文檔對象模型文檔對象模型圈起來的是比較常用的接口。目前接口繼承于接口。 前端最基礎的就是 HTML+CSS+Javascript。掌握了這三門技術就算入門,但也僅僅是入門,現在前端開發的定義已經遠遠不止這些。前端小課堂(HTML/CSS/JS),本著提升技術水平...
閱讀 1669·2021-11-17 09:33
閱讀 3531·2021-11-16 11:40
閱讀 3055·2019-08-30 11:23
閱讀 1048·2019-08-29 16:36
閱讀 2464·2019-08-29 13:23
閱讀 1738·2019-08-29 12:59
閱讀 1542·2019-08-29 12:42
閱讀 1979·2019-08-28 18:22