摘要:詞法結構字符集字符集程序是用字符集編寫的注釋支持兩種格式的注釋單行注釋另一個注釋也是一個注釋這是一個多行注釋直接量直接量程序中直接使用的數據值標識符和保留字標識符就是一個名字,用來對變量和函數命名,或者用作代碼中某些循環語句中的跳轉位置的標
1 詞法結構 1.1 字符集
字符集:JS程序是用Unicode字符集編寫的
1.2 注釋js支持兩種格式的注釋
// 單行注釋 /* 另一個注釋 */ //也是一個注釋 /*
這是一個
多行注釋
*/
直接量literal:程序中直接使用的數據值
12 //number true //boolean "hello" //string 1.2 //float [1, 2, 3] //array var obj = { name: "Oli", age: 18 }; //object1.4 標識符和保留字
標識符:就是一個名字,用來對變量和函數命名,或者用作JavaScript代碼中某些循環語句中的跳轉位置的標記
保留字:JavaScript把一些標識符拿出來用作自己的關鍵字
2 類型、值和變量數據類型type:能夠表示并操作的值的類型叫做數據類型(type)
可擁有方法的類型
不可擁有方法的類型
可變類型:可修改的,如對象和數組
不可變類型:不可修改的,如數字、布爾值、null和undefined
變量variable:變量是一個值的符號名稱,可以通過名稱獲得對值的引用
全局變量global variable:不在任何函數內聲明的變量稱為全局變量
數據類型
原始類型(Primitive type)
數字
字符串
布爾值
null(空)
undefined(未定義)
對象類型(object type)
對象object:對象 (object)是屬性(property)的集合,每個屬性都由"名/值對"構成。
無序集合:普通的javascript對象是“命名值”的無須集合
有序集合:數組array,表示帶編號的值的有序集合
函數function:是具有與它想關聯的可執行代碼的對象,通過調用函數來運行科執行代碼,并返還運算結果
構造函數constructor:如果函數初始化(使用new運算符)一個新建對象,我們稱之為構造函數
類class:構造函數初始化對象組成的集合
數組array類
函數function類
日期date類
正則regexp類
錯誤error類
2.1 數字數字直接量(numeric literal):當一個數字直接出現在javascript程序中,我們陳之為數字直接量
2.1.1 整型直接量由于某些javascript的實現支持八進制的直接量,而有些不支持,因此最好不要使用以0為前綴的整數直接量。在ECMAScript6的嚴格模式下,八進制的直接量是明令禁止的。
2.1.2 浮點型直接量語法:[digits][.digits][(E|e)[(+|-)]digits]
3.14 0.14 3.14e12 0.14E-212.1.3 算術運算
javascript中的算術運算在溢出(overflow)、下溢(underflow)或被零整除時不會報錯。
溢出overflow:數字運算結果超過了javascript中所能表示的數字上線
下溢underflow:當運算結果無線接近于零并比 javascript能表示的最小值還小
全局變量Infinaty和NaN在ECMAScipt3中,這兩個值是可以讀寫的。ECMAScript5修正了這個問題,將他們定義為只讀的
isNaN():參數是NaN或者是一個非數字值(比如字符串和對象),則返回true
isFinite():參數不是NaN、Infinty或-Infinity的時候返回true
2.1.4 二進制浮點數和四舍五入錯誤javascript中使用實數的時候,常常只是真實值的一個近似的表示
金融計算時,要使用整數“分”,而不要使用小數“元”進行基于貨幣單位的運算
3.1.5 日期和時間Date()構造函數
2.2 文本字符串(string):是一組16位值組成的不可變的有序序列,每個字符通常來自于Unicode字符集
javascript采用UTF-16編碼的Unicode字符集
最常用的Unicode字符都是通過16位的內碼表示,并代表字符串中的單個字符;不能表示為16位的Unicode字符則遵循UTF-16編碼規則——用兩個16位值組成一個序列(亦稱為“代理項對”)表示。這意味著一個長度為2的javascript字符串(兩個16位值)可能表示一個Unicode字符
2.2.1 字符串直接量ECMAScript 3中字符串直接量必須寫在一行;
ECMAScript 5中可以拆分成數行,每行必須以結束
如果想另起一行,則需要用轉義字符
var x = "hello moto! goodby nokia!"; console.log(x); //hello moto! goodby nokia! var y = "hello moto! goodby nokia!"; console.log(y); //hello moto! //goodby nokia!2.2.2 轉義字符
兩個轉義字符的通用版本:
xXX:十六進制數表示Latin-1
uXXXX:u表示Unicode中的任意字碼
var x = "xA9"; console.log(x); //? A9為16進制數,表示Latin-1中的字碼 var y = "hello u000A there"; console.log(y); //表示換行符,其中u表示4個十六進制數指定的任意Unicode字符 var z = "hello there"; console.log(z); //也可以用 表示換行符
可以在這里查看Unicode字符集Unicode字符百科;
2.2.3 字符串的使用ECMAScript 5中,字符串可以當做只讀數組,用方括號語法來訪問單個字符
2.2.4 匹配模式JavaScript采用Perl中的正則表達式語法
2.3 布爾值布爾值boolean:指代真假、開關、是否,即保留字true和false
假值(falsy value):false以及能夠被轉換成false的值;
真值(truthy value):true以及能夠被轉換成true的值;
2.4 null和undefinednull空值:可以表示數字、字符串和對象是“無值”的
undefined空缺:表明變量沒有初始化
ECMAScript 3:undefined是可讀寫的變量;
ECMAScript 5:undefined則是只讀的;
2.5 全局對象全局對象的初始屬性并不是保留字,但它們應該當做保留字來對待
//代碼的最頂級可用this來引用全局對象 var str = "Hello World"; var global = this; console.log(global.str); console.log(str); console.log(this.str); //上面三中寫法都是一樣的2.6 包裝對象
字符串、數字等的屬性都是只讀的,且不能給他們定義心屬性;
當視圖給他們定義屬性或修改屬性時,修改只發生在臨時對象身上;
var s = "str"; s.len = 4; console.log(s.len); //undefined 臨時對象的修改,隨即被“銷毀”
JavaScript會在必要時將包裝對象轉換成原始值:
var a = "test"; var b = 1; var c = true; var A = new String(a); var B = new Number(b); var C = new Boolean(c); console.log(A); //String對象 console.log(B); //Number對象 console.log(C); //Boolean對象 console.log(a == A); //true console.log(a === A); //false console.log(typeof a); //string console.log(typeof A); //object2.7 不可變的原始值和可變的對象引用
JavaScript中原始值(undefined、null、布爾值、數字和字符串)與對象(對象、數組、函數)不同;前者是不可變的,后者才可變;
如字符串修改后仿佛修改了原來的值,實際上是創建了新的字符串:
var s = "string"; s.toUpperCase(); console.log(s); //string原始值沒有變化
對象則是可變的:
var obj = { name: "oliver", age: 18 }; obj.name = "alice"; console.log(obj.name) //alice
字符串的比較只要每個索引上的值都相等且長度相等就是相等,而對象包含的屬性及值都相同,但也是不相等的:
var s = "string"; var S = "string"; console.log(s === S); //True var obj = { name: "oli" }; var OBJ = { name: "oli" }; console.log(obj === OBJ); //False var a = [1,2]; var A = [1,2]; console.log(a === A); //False
對象就是引用類型(reference type);
對象值就是引用;
對象的比較就是引用的比較,當且僅當它們引用同一個基對象時,他們才相等:
var a = []; var b = a; b[0] = 1; console.log(a[0]); //1 導致引用的數組也被修改 console.log(a === b); //True
如何復制數組呢:
var a = [1,2,3]; var b = []; for (var i = 0; i < a.length; i++) { b[i] = a[i]; }; console.log(b.toString()); //1,2,3 //或者用concat方法 var a = [1,2,3]; var b = a.concat(); b[0] = 0; console.log(b.toString()); console.log(a.toString());
比較兩個數組:
// var a = [1, 2, 3]; // var b = a.concat(); function compareArray(a, b) { if (a.length !== b.length) { return false; } for (var i = 0; i < a.length; i++) { if (a[i] !== b[i]) { return false; } }; return true; } // console.log(compareArray(a, b)); //True2.8 類型轉換 2.8.1 轉換和相等性
==:等于運算符
===:恒等運算符
2.8.2 顯式類型轉換為了使得代碼可讀性增強,需要用到顯式轉換(Number()、String()等)
數字轉換成字符串
Number類定義的toString()方法可以接收表示轉換基數(radix)的可選參數:
var x = 12315; console.log(x.toString(16)); //301b
數字轉換成浮點型或整型
toFixed():根據小數點后的指定位數將數字轉換為字符串,不使用指數計數法;
toExponential():使用指數計數法
toPrecision():根據指定的有效數字位數將數字轉換成字符串
var n = 123456.789; console.log(n.toFixed(0)); //1234567 console.log(n.toFixed(2)); //123456.79 console.log(n.toFixed(5)); //123456.78900 console.log(n.toExponential(1)); //1.2e+5 console.log(n.toExponential(3)); //1.235e+5 console.log(n.toExponential(10)); //1.2345678900e+5 console.log(n.toPrecision(4)); //1.235e+5 console.log(n.toPrecision(8)); //123456.79 console.log(n.toPrecision(10)); //123456.7890
字符串轉換成數字
parseInt():解析整數
parseFloat():解析整數和浮點數,接收第二個參數為基數
var s = "3.14 pi"; console.log(parseInt(s)); //3 console.log(parseFloat(s)); //3.14 var S = "0.123 hello"; console.log(parseInt(S)); //0 console.log(parseFloat(S)); //0.123 var x = ".12 good"; console.log(parseInt(x)); //NaN console.log(parseFloat(x)); //0.12 var X = "$0.123 hello"; console.log(parseInt(X)); //NaN console.log(parseFloat(X)); //NaN2.8.3 對象轉換成原始值
toString()
valueOf()
2.9 變量聲明ECMAScript 5嚴格模式下如果給一個沒有聲明的變量賦值會報錯:
"use strict"; x = 10; //報錯2.10 變量作用域
變量作用域(scope)是程序源代碼中定義這個變量的區域
2.10.1 函數作用域和聲明提升(提前)塊級作用域(block scope)
聲明提前(hoisting):函數里聲明的所有變量(不涉及賦值)都被“提前”至函數體的頂部:
//函數內部的局部變量遮蓋了同名的全局變量,在執行到var的時候才會真正的被賦值 var scope = "global"; function fc () { console.log(scope); //undefined var scope = "local"; console.log(scope); //local } fc(); //此處沒有同名的局部變量,所以輸出全局變量的值global var scope = "global"; function fc () { console.log(scope); //global } fc();
正確的書寫方式:
//上述代碼應該寫成: var scope = "global"; function fc () { var scope; console.log(scope); //undefined scope = "local"; console.log(scope); //local } fc();
先聲明再賦值或使用
2.10.2 作為屬性的變量使用var聲明一個變量是不可配置的(不可用delete)
"use strict" var x = 10; this.y = 10; delete this.y; delete x; //報錯
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/79007.html
摘要:核心概念原則響應式瀏覽器支持預處理器響應式模塊化官網地址地址名稱類別語言創建者云適配最后更新時間年月人氣在上有描述國內首個開源跨屏前端框架,中文排版支持更優本土化組件豐富。 2015年已經過去了,作為一個前端開發者,我覺得有必要把過去一年幫助過我或朋友們的優秀開源前端框架做個盤點,希望這些項目能夠越來越好,幫助到更多的前端開發者們。此榜單根據github上star數作為排名依據,一個人...
摘要:核心概念原則響應式瀏覽器支持預處理器響應式模塊化官網地址地址名稱類別語言創建者云適配最后更新時間年月人氣在上有描述國內首個開源跨屏前端框架,中文排版支持更優本土化組件豐富。 2015年已經過去了,作為一個前端開發者,我覺得有必要把過去一年幫助過我或朋友們的優秀開源前端框架做個盤點,希望這些項目能夠越來越好,幫助到更多的前端開發者們。此榜單根據github上star數作為排名依據,一個人...
摘要:核心概念原則響應式瀏覽器支持預處理器響應式模塊化官網地址地址名稱類別語言創建者云適配最后更新時間年月人氣在上有描述國內首個開源跨屏前端框架,中文排版支持更優本土化組件豐富。 2015年已經過去了,作為一個前端開發者,我覺得有必要把過去一年幫助過我或朋友們的優秀開源前端框架做個盤點,希望這些項目能夠越來越好,幫助到更多的前端開發者們。此榜單根據github上star數作為排名依據,一個人...
摘要:概述本文主要介紹了我對的一些核心特性的理解,包括架構特點機制核心模塊與簡單應用。在此期間,主線程繼續執行其他任務。延續了瀏覽器端單線程,只用一個主線程執行,不斷循環遍歷事件隊列,執行事件。 原文地址在我的博客,轉載請注明來源,謝謝! node是在前端領域經常看到的詞。node對于前端的重要性已經不言而喻,掌握node也是作為合格的前端工程師一項基本功了。知道node、知道后端的一些東西...
摘要:簡介原文鏈接簡稱是一種輕量級,解釋型的編程語言,其函數是一等公民。標準的目標是讓任何一種程序設計語言能操控使用任何一種標記語言編寫出的任何一份文檔。核心規定了如何映射基于的文檔結構,以便簡化對文檔的任意部分的訪問和操作。 JavaScript 簡介 原文鏈接 JavaScript ( 簡稱:JS ) 是一種 輕量級,解釋型 的編程語言,其函數是一等公民。眾所周知,它是用于網頁開發的腳...
閱讀 3172·2021-09-22 15:05
閱讀 2748·2019-08-30 15:56
閱讀 1054·2019-08-29 17:09
閱讀 792·2019-08-29 15:12
閱讀 2076·2019-08-26 11:55
閱讀 3038·2019-08-26 11:52
閱讀 3370·2019-08-26 10:29
閱讀 1374·2019-08-23 17:19