學習js基礎常常容易忽略的細節,這些細節在面試中遇到往往是致命的。對於應屆生來,最大的挑戰就是基礎不牢,很多技術一旦用起來就會出現很多疑惑
javascript的概念:
JavaScript 是一種輕量級的腳本語言。所謂“腳本語言”(script language),
指的是它不具備開發操作系統的能力,而是隻用來編寫控制其他大型應用程序
(比如瀏覽器)的“腳本”。
瀏覽執行Js代碼
瀏覽器內核分成兩部分:
渲染引擎:
解析HTML與CSS,比如chrome瀏覽器的blink,老版本的webkit
js引擎:
瀏覽器本身不會執行js代碼,而是通過內置javascript引擎(解釋器)來js代碼
js引擎會逐行解釋執行
由於js引擎越來越獨立,內核就傾向於只指渲染引擎,負責請求網絡頁面資源加以解析排版並呈現給用戶
學習javascript三步走
ECMAScript:
javascript的基本語法,別名javascript或Jscript(Javascript的基礎語法與核心知識)
DOM:
頁面文檔對象類型
BOM:
瀏覽器對象模型,通過BOM可以操作瀏覽器窗口,如彈出框、控制瀏覽器的頁面跳轉,獲取分辨率等
js代碼書寫的位置
行內:
<button οnclick="meythods()"></button>
內嵌:
<script>js代碼</script>
外部引用:
<script src="外部js文件的url"></script>
js註釋:
多行註釋:/* 註釋內容 */
單行註釋://註釋內容
數據類型:
JavaScript 的數據類型共有六種。(ES6 又新增了第七種 Symbol 類型的值)
數值(number):
整數和小數(比如1和3.14)
Number.MAX_VALUE最大值 Infinity無窮大,大於任何數據
Number.MIN_VALUE最小值 -Infinity無窮小,小於任何數據
字符串(string):
文本(比如Hello World),'字符串(推薦使用單引號)',屬性length,字符串長度。
布爾值(boolean):
表示真僞的兩個特殊值,即true(真)和false(假);默認爲false
常考細節注意:
boolean類型的值參與加法運算時會先將true轉換爲1,false轉換爲0,在進行加法值運算
var flag1=true;
var flag2=false;
console.log(flag1+1); //true轉換爲數值1,輸出2
console.log(flag2+1); //false轉換爲0,輸出1
console.log(1||2); //輸出1
console.log(1&&2); //輸出2
console.log(([])?true:false); //相當於(true)?true:false
console.log([]==false?true:false); //相當於0==0?true:false
console.log(({}==false)?true:false); //相當於(NaN==0)?true:false;
注意:
當比較運算涉及類型轉換時 (i.e., non–strict comparison), JavaScript會按以下規則對字符串,數字,布爾或對象類型的操作數進行操作:
1.當比較數字和字符串時,字符串會轉換成數字值。 JavaScript 嘗試將數字字面量轉換爲數字類型的值。 首先, 一個數學上的值會從數字
字面量中衍生出來,然後這個值將被轉爲一個最接近的Number類型的值。
2.如果其中一個操作數爲布爾類型,那麼布爾操作數如果爲true,那麼會轉換爲1,如果爲false,會轉換爲整數0,即0。
3.如果一個對象與數字或字符串相比較,JavaScript會嘗試返回對象的默認值。操作符會嘗試通過方法valueOf和toString將對象轉換爲其原
始值(一個字符串或數字類型的值)。如果嘗試轉換失敗,會產生一個運行時錯誤。
4.注意:當且僅當與原始值比較時,對象會被轉換爲原始值。當兩個操作數均爲對象時,它們作爲對象進行比較,僅當它們引用相同對象時返回true。
5.如果一個對象與數字或字符串相比較,JavaScript會嘗試返回對象的默認值。操作符會嘗試通過方法valueOf和toString將對象轉換爲其原
始值(一個字符串或數字類型的值)。所以[].valueOf().toString()爲""
undefined:
表示“未定義”或不存在,即由於目前沒有定義,所以此處暫時沒有任何值
例:
var a=undefined;
console.log(a+"pink");// 輸出undefinedpink字符串拼接
注意:
undefined與數字相加,最後結果爲NaN
console.log(undefined+1); //輸出NaN
null:
表示空值,即此處的值爲空。
例:
var space=null;
console.log(space+"pink"); //輸出nullpink字符串拼接
console.log(space+1);//輸出1
注意:null與任何數字相加結果都爲原相加的數字
undefined==null =>輸出true
undefined===null =>輸出false
對象(object):各種值組成的集合。
狹義的對象(object)
數組(array)
函數(function)
typeof類型判斷
typeof 1; "number"
typeof ""; "string"
typeof true; "boolean"
typeof undefined; "undefined"
typeof null; "object"
typeof []; "object"
typeof {}; "object"
數據類型轉換
數字類型轉字符串類型的三種方法:
1.變量.toString();
2.var num=String(變量);
3.變量+"字符串";
字符串類型轉數字類型的三種方法:
1.轉爲整數:
parseInt(字符串變量);字符串變量內容不能以字母開頭,否則輸出NaN
以數字開頭,則會連續讀到小數點前一位非字母字符,轉換爲整數
例:
var num=parseInt("123.2356fgdgf");
console.log(num); //輸出123
var num=parseInt("dsd123456");
console.log(num); //輸出NaN
轉爲小數
parseFloat(字符串變量);字符串變量內容不能以字母開頭,否則輸出NaN
例:
var num=parseInt("123.2356fgdgf");
console.log(num); //輸出123.2356
var num=parseInt("dsd123456");
console.log(num); //輸出NaN
var num=parseInt("123m.456");
console.log(num); //輸出123
2.利用Number(字符串變量)
例:
var num=Number("123gf");
console.log(num); //輸出123
var num=Number("ds123");
console.log(num); //
3.利用運算符(-/*%)隱式轉換
例:
"dfds123"-5 NaN
"1234fd"-5 NaN
"123"-5 118
其它數據類型轉換爲布爾類型
代表空、否定的值都會轉換爲false,如:''、0、NaN、null、undefined,其餘的都轉換爲true
例:
Boolean(''); //false
Boolean(0); //false
Boolean(NaN); //false
Boolean(null); //false
Boolean(undefined); //false
Boolean([]); //false
Boolean({}); //false
運算符
算術運算符
不能直接判斷兩是否相等
例:
0.1+0.2==0.3 //false
0.07*100==7; //false
比較運算符:
=== 嚴格相等,要求兩側的變量數據類型和值都要完全一致
== 兩變量值相同即可,對象比較內存地址
例:
18==="18" //false 比較值與類型是否相同
18=="18" //true 比較值是否相同
邏輯運算符
邏輯與短路運算
例:
console.log(1&&2); //輸出2
console.log(1&&0); //輸出0
console.log(0&&1); //輸出0
如果表達式1爲真,則返回表達式2,如果表達式1爲假,則返回表達式1
邏輯或短路運算
例:
console.log(1||2); //輸出1
console.log(1||0); //輸出1
console.log(0||1); //輸出1
console.log(0||0); //輸出0
運算符的優先級:
小括號()>一元運算符(++、--、!)>算術運算符(+-*/%)>比較運算符(==、===、!=、!==、>、<、>=、<=)>邏輯運算符(&&、||)>賦值運算符(=)
條件分支語句:
判斷字符串是否爲空的條件:
str=="" || str.length==0
三元表達式(常用於替換if-else語句)
條件表達式?表達式1:表達式2
switch語句與if-else語句的應用場景
1.有範圍判斷條件優先用if-else語句
有確定值,優先用switch,效率高
2.分支少,用if-else語句
分支多,用switch語句