js 入門級常見問題

来源:http://www.cnblogs.com/yiyefusheng/archive/2017/01/06/6257828.html
-Advertisement-
Play Games

寫在前面:以下是個人總結的關於js常見的入門級的問題一些總結。 js是有 ECMAScript Dom Bom 三部分組成。 1,undefined,NaN,Null,infinity 1) undefined 是undefined 類型 var a; //聲明變數後不賦值 typeof 類型判斷方 ...


寫在前面:以下是個人總結的關於js常見的入門級的問題一些總結。

js是有 ECMAScript Dom Bom 三部分組成。

1,undefined,NaN,Null,infinity

1) undefined 是undefined 類型

var a; //聲明變數後不賦值

typeof 類型判斷方法

console.log(typeof(a))  //undefined

2) NaN 是 number 型 表示不是一個數字

var a=123;

var b="abc";

a-b 得到NaN

console.log(typeof(a-b)) number

3) Null 面向對象的概念 表示該對象為空

4)infinity 是number 類型 表示無窮大 除數為0可得

2,js精度問題

js在運算時會存在精度問題:

1)可以先乘以100 1000 ....先化成整數在100 1000
2)number.toFixed(參數) 設置保留小數位數 1.528.toFixed(2) =1.53

3,Math 對象常用幾個函數

1)天花板函數 ceil Math.ceil(1.23)=2 向上返回最小的整數
2)地板函數 floor Math.floor(1.23)=1 向下返回最小的整數
3)隨機數
Math.random() 返回0-1 的隨機數
Math.floor(Math.random()*10) 返回0-9 的隨機數
4) Math.max() Math.min() 返回最大最小的值
5)Math.abs(x)返回一個絕對值
6)Math.round(x) 四捨五入

4,數據類型轉換

1)隱式轉換 變數在運算過程中發生的類型轉換
!! console.log(!!"abc")
2)顯示(強制)轉換:
轉字元串:a,(String)變數 b,變數.toString()
轉數字型:a,Number(變數) b,parseInt(變數) c,parseFloat(變數)
轉布爾型:Boolean(變數)
幾種轉換為false的 undefined NaN Null 0 false ""

5,邏輯運算符的短路操作:當操作數不是bool值時

1)隱式轉換
2)從左往右
3) 哪個操作數可以決定結果,就返回這個原操作數
"100"&&0;//true&&false

6,數組檢測方式

var arr=[]
1)Array.isArray(arr) 有相容性問題
2)arr instanceof Array 推薦使用
3) Object.prototype.toString.Call(arr) 可檢測任意類型

7,函數的arguments 和 es6 rest 用法

1)arguments只在函數內部起作用,並且永遠指向當前函數的調用者傳入的所有參數 類似數組
2)rest參數只能寫在最後,前面用...標識
function foo(a, b, ...rest) {
console.log('a = ' + a);
console.log('b = ' + b);
console.log(rest);
}

foo(1, 2, 3, 4, 5);
// 結果:
// a = 1
// b = 2
// Array [ 3, 4, 5 ]

8,函數變數提升:

先掃描整個函數體的語句,把所有申明的變數“提升”到函數頂部
'use strict';
function foo() {
var x = 'Hello, ' + y;
alert(x);
var y = 'Bob';
}
foo();
雖然是strict模式,但語句var x = 'Hello, ' + y;並不報錯,原因是變數y在稍後申明瞭。
但是alert顯示Hello, undefined,說明變數y的值為undefined。
這正是因為JavaScript引擎自動提升了變數y的聲明,但不會提升變數y的賦值。

............................................................................................
變數提升後代碼:
function foo() {
var y; // 提升變數y的申明
var x = 'Hello, ' + y;
alert(x);
y = 'Bob';
}
註意:函數內變數的怪異聲明模式
function fun(){
num=10 //沒寫var 就相當於全局變數
}
fun()
console.log(num) //10

9,this 指向問題

 1 'use strict';
 2     var obj={
 3         name:"test",
 4         printName:function(){
 5             console.log(this.name)
 6         }
 7     }
 8     obj.printName(); //顯示 test  this 指的就是obj
 9 
10     var obj={
11             name:"test",
12             printName:function(){
13                 function showName (){
14                     console.log(this.name)
15                 } 
16                 return showName()
17             }
18         }
19     obj.printName(); //this 指向 undefined (在非嚴格模式下指向Windows)
20 
21      解決方法: var obj={
22             name:"test",
23             printName:function(){
24                 var self=this //在函數外捕獲this
25                 function showName (){
26                     console.log(self.name)
27                 } 
28                 return showName()
29             }
30         }

 

10,sort 排序的坑

1)Array的sort()方法預設把所有元素先轉換為String再排序,如果直接排序數字你就踩坑了
2)預設根據ASCII碼進行排序
3)sort 是一個高階函數,sort(function(){
//寫具體的實現邏輯
})
// 升序
sort(function(a,b){
return a-b
})
//降序
sort(function(a,b){
return b-a
})

11,獲取樣式

getComputedStyle(el,null).width ie 不支持
document.getElementById("btn").currentStyle.width ie提供的
  function getStyle(tag, attr) {  return tag.currentStyle ? tag.currentStyle[attr] : getComputedStyle(tag, null)[attr];  } 

12,拼接字元串的問題

在ie7以下存在性能問題,可用數組替換
ie7以上不存在該問題

13,數組的幾個方法

1)arr.slice(start,end) 拷貝數組中的一段數據,返回拷貝的數組
2)splice(start,length) 返回截取數組的部分元素,修改原數組
splice 的參數超過2個會將剩下的參數添加到被截取的數組位置上
arr.splice(1,2,"a","b")

14,清空數組:

1)arr.length=0
2)arr=[] //推薦使用
3)arr.splice(0,arr.length)


15,避免事件被覆蓋的方法(ie9 以下不支持)

標簽.addEventListener(enventType,fn,flase) false預設冒泡 true 捕獲
function fun(){
alert("你好")
}
eg:btn.addEventListener("click",fun)
移除事件監聽(參數必須一致)
btn.removeEventListener("click",fun)


ie-6-10(enventType 加on)
標簽.attachEvent(enventType,fn)
標簽.detachEvent(enventType,fn)

16,事件冒泡,和事件捕獲

事件冒泡:從裡向外執行,遇到相同的事件及執行
事件捕獲:執行順序與冒泡相反(不推薦使用,因為ie使用attachEvent 沒有第三個參數)

阻止事件冒泡
e.stopPropagation()
ie 中阻止事件傳播 cancelBubble=true

17,事件的對象作用:記錄當前事件觸發時的一些信息

btn.onclick=function(event){}
event.target真正觸發事件的元素
event.type="click"
event.clinetX/clinetY
ie 低版本不相容
var tar=e.target||e.srcElement

18,Json 串的2方法

1)object-->string  JSON.stringify()
2)  string--> obj  JSON.parse()

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文地址 分享提綱: 1. 概述 2. 知識點 1.概述 1)【書名及鏈接】 《大型網站技術架構 核心原理與案例分析》 2)【主要內容】 由李智慧著作的《大型網站技術架構(核心原理與案例分析)》通過梳理大型網站技術發展歷程,剖析大型網站技術架構模式,深入講述大型互聯網架構設計的核心原理,並通過一組典 ...
  • 隨著 RESTful、雲計算、DevOps、持續交付等概念的深入人心,微服務架構逐漸成為系統架構的一個代名詞。本文從理論出發,介紹微服務架構的概念、本質特征及優缺點,並與當前普遍的單塊(三層)架構進行全方面對比,讓你對微服務架構有很好的認知。 ...
  • 架構設計總為業務而服務,並非技術而技術;而業務現狀和公司的要求往往是讓架構設計最為糾結和取捨的,特別是考慮人員,資源,成本等各方面的限制,選擇一個可行的方案。雲服務化是公司總體堅定的業務方向,基礎架構的沉澱和分散式的開發避無可避(而非傳統業務代碼拷貝到外網伺服器上就是雲服務了)。架構設計首先會以架構... ...
  • 單例模式 代碼: 第一種: 第二種: 上面兩種單例模式中,基本思路相同,將構造方法私有,建立私有的實例對象,提供公有的對象。第一種方法,外部每次調用時都會判斷實例是否已經創建,第二種方法則是在一開始就將類的對象實例化好了,一直存在在記憶體中。區別也不大,單例的思想也就這麼簡單。這裡要說的是下麵這種方法 ...
  • 六、新建webpack配置文件 webpack.config.js 文件整體框架內容如下,後續會詳細說明每個配置項的配置 webpack.config.js直接放在項目demo目錄下 七、新建app文件夾,存放html+css+js index.html css/index.css js/index ...
  • 嗯,瀏覽器一般會設置,預設樣式,對於,我們來說,這樣很不方便,所以就有了樣式重置。 接下來我推薦兩個樣式重置的 小東西 resert 我這裡附上當前最新的版本,如有需要可以直接去,resert.com,下載 normalize.com 我推薦使用這個,因為還保留了某些標簽的特性,比如h1,h2,h3 ...
  • 誤區一.多div症 上述使用多餘的div標簽“多div症”,應簡化成下 誤區二.多類class症 註意點class可以應用於頁面任意多個元素,非常適合標識內容類型或其他相似的條目 一段新聞(新聞標題、新聞詳情內容)類news-head與news-text 多類症表現,不需要這麼多的類區分元素樣式 最 ...
  • 1.什麼是ajax? Ajax 是 Asynchronous JavaScript and XML(以及 DHTML 等)的縮寫。 2.ajax需要什麼基礎? HTML 用於建立 Web 表單並確定應用程式其他部分使用的欄位。 JavaScript 代碼是運行 Ajax 應用程式的核心代碼,幫助改進 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...