• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • 01------JS基礎總結

    標簽: JavaScript

    數據類型

    1.分類

    基本(值)類型

    • Number: 任意數值
    • Srting: 任意字符串
    • Boolean: true/false
    • undefined: undefined
    • null: null

    對象(引用)類型

    • Object: 任意對象
    • Function: 特別的對象(可以執行)
    • Array: 特別對象(內部數據有序/數據下標)

    2.判斷

    • typeOf: 數值/字符串/布爾值/undefined/funtion
    • instanceof: 判斷對象的具體類型
    • ===: null/undefined

    注意:typeOf不能區別:null和Object,Object和Array
    3.相關問題

    1).undefined和null的區別?

    • undefined代表定義未賦值

    • null定義并賦值了,只是值為null

    var a
    console.log(a) // undefined
    a = null
    console.log(a) // null
    

    2).什么時候給變量賦值為null?

    • 初始賦值,表明將要賦值為對象
    • 變量使用結束前,讓對象成為垃圾對象(被垃圾回收器回收)
    // 開始
    var b = null //初始時賦值為null,表明將要賦值為對象
    b = { name: 'alice'}
    // 最后
    b = null //將b賦值為null 讓b指向的對象成為垃圾對象(回收)
    

    3).嚴格區分變量類型與數據類型?

    數據的類型

    • 基本類型
    • 對象類型

    變量的類型

    • 基本類型:保存的就是基本類型的數據
    • 引用類型:保存的就是地址值

    圖解變量的類型:
    變量類型圖解
    數據,變量與內存

    1.什么是數據?

    • 存儲在內存中代表特定信息的“東東”,本質上是0101…

    2.什么是內存?

    • 內存條通電后產生的可儲存數據的空間(臨時存在)
    • 內存產生和死亡:內存條(電路板)---->通電---->產生內存空間---->存儲數據---->處理數據---->斷電---->內存空間和數據都消失
    • 一塊小內存的2個數據
      • 內部存儲的數據
      • 地址值
    • 內存分類
      • 棧:全局變量/局部變量
      • 堆:對象

    3.什么是變量?

    • 可變化的量,由變量名和變量值組成
    • 每個變量都對應的一塊小內存,變量名用來查找對應的內存,變量值就是內存中保存的數據

    4.內存、數據、變量三者的關系?

    • 內存是用來存儲數據的空間
    • 變量是內存的標識

    5.相關問題

    1).關于賦值與內存的問題
    var a = XXX, a內存中到底保存的是什么?

    • XXX是基本數據,保存的就是這個數據
    • XXX是對象,保存的是對象的地址值
    • XXX是一個變量,保存的XXX的內存內容(可能是基本數據,也可能是地址值)
    var a = 3 //a是基本數據,保存的就是3
    a = function () {
    	
    } // a是對象,保存的是對象的地址值
    
    // a是一個變量,保存的b的內存內容
    var b = 'alice' // b是基本數據,所以a保存的是基本數據"alice"
    a = b 
    b = {} //b是對象,所以a保存的是對象b的地址值
    a = b
    

    2).關于引用變量賦值問題

    • 2個引用變量指向同一個對象,通過一個變量修改對象內部數據,另一個變量看到的是修改之后的數據
    var obj1 = { name: 'alice' }
    var obj2 = obj1
    obj1.name = 'bob'
    cosole.log(obj2.name) // bob
    
    • 2個引用變量指向同一個對象,讓其中一個引用變量指向另一個對象,另一個引用變量依然指向前一個對象
    var a = { age: 12 }
    var b = a
     a = { name: 'alice', age: 13 }
     console.log(b.age, a.name, a.age) // 12 alice 13
    

    3).在js調用函數時傳遞變量參數時,是值傳遞還是引用傳遞?

    • 理解1: 都是值(基本/地址值)傳遞
    • 理解2:可能是值傳遞,也可能是引用傳遞(地址值)

    4).引擎如何管理內存?

    (1).內存生命周期

    • 分配小內存空間,得到它的使用權
    • 存儲數據,可以反復進行操作
    • 釋放小內存空間

    (2).釋放內存

    • 局部變量:函數執行完自動釋放
    • 對象:成為垃圾對象---->垃圾回收器回收

    對象

    1.什么是對象?

    • 多個數據的封裝體
    • 用來保存多個數據的容器
    • 一個對象代表現實中的一個事物

    2.為什么要用對象?

    • 統一管理多個數據

    3.對象的組成

    • 屬性:屬性名(字符串)和屬性值(任意)組成
    • 方法:一種特別的屬性(屬性值是函數)

    4.如何訪問對象中內部數據?

    • .屬性名:編碼簡單,有時不可以這樣用
    • [‘屬性名’]:編碼麻煩,能通用

    5.相關問題
    1).什么時候必須使用[‘屬性名’]的方式?

    • 屬性名包含特殊字符:- 空格
    • 變量名不確定
    //包含特殊符號
    var p = {}
    p['content-type'] = 'text/json'
    console.log(p['content-type'])
    
    //變量名不確定
    var pName =  'myName'
    var value = 12
    // p.pName = value //不能用
    p[pName]) = value
    console.log(p[pName])
    

    函數

    1.什么是函數?

    • 實現特定功能的n條語句的封裝體
    • 只有函數時可以執行的,其他類型的數據不能執行

    2.為什么要用函數?

    • 提高代碼復用
    • 便于閱讀交流

    3.如何定義函數?

    • 函數聲明
    • 表達式

    4.如何調用函數?

    • 直接調用
    • 通過對象調用
    • new調用
    • 將函數指定為任意對象的方法進行調用
    var obj = {}
    function test() {
    	this.XXX = 'abs'
    }
    // obj.test() //不能直接調用
    test.call(obj) 
    // or
    // test.apply(obj)
    console.log(obj.xxx)
    

    5.回調函數

    1).什么函數才是回調函數?

    • 你定義的
    • 你沒有調用
    • 但是它最終執行了

    2).常見的回調函數

    • dom事件回調函數
    • 定時器回調函數
    • ajax請求回調函數
    • 生命周期回調函數

    6.IIFE

    1).理解

    • 全稱:Immediately-Invoked Function Expression
    • 立即執行函數表示式

    2).作用

    • 隱藏實現
    • 不會污染外部(全局)命名空間
    • 用它來編碼js模塊

    7.函數中的this

    1).this是什么?

    • 任何函數本質上都是通過某個對象來調用的,如果沒有直接指定就是window
    • 所有函數內部都有一個變量this
    • 它的值是調用函數的當前對象\

    2).如何確定this的值?

    • test(): window
    • p.test(): p
    • new test(): 新創建的對象
    • p.call(obj): obj

    可以自測一下對this的理解

      function Person(color) {
        this.color = color
        this.getColor = function () {
          return this.color
        }
        this.setColor = function () {
          this.color = color
        }
      }
      Person('red') // this是誰?
      var p = new Person('yellow') // this是誰?
      p.getColor() // this是誰?
      var obj = {}
      p.setColor.call(obj, 'black') //this是誰?
      var test = p.setColor
      test() //this是誰?
      
      function fun1() {
      	function fun2() {
    		console.log(this)
    	}
    	fun2() //this是誰?
      }
      fun1()
    

    分號問題
    1.js一條語句后面可以不加分號
    2.是否加分號是編碼風格問題
    3.在下面2種情況不加分號會有問題

    • 小括號開頭的前一條語句
    • 中括號開頭的前一條語句

    4.解決辦法: 在行首加分號
    5.例子:vue.js庫

    版權聲明:本文為hry1243916844原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/hry1243916844/article/details/104036280

    智能推薦

    js基礎總結

    ## 數據類型的分類和判斷 * 基本(值)類型 * Number ----- 任意數值 -------- typeof * String ----- 任意字符串 ------ typeof * Boolean ---- true/false ----- typeof * undefined --- undefined ----- typeof/=== * null -------- null --...

    js常用基礎總結

    簡介 1.js類型 首先,現在js的類型有以下幾種: 基本類型 : String , Number , null , undefined , Boolean , Symbol , Bigint 引用類型 : object , function (1)基本類型和應用類型的區別 基本數據類型是按值訪問的,因為可以直接操作保存在變量中的實際值。示例: 如圖: javascript的引用數據類型是保存在堆...

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    freemarker + ItextRender 根據模板生成PDF文件

    1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...

    電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!

    Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...

    猜你喜歡

    requests實現全自動PPT模板

    http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...

    Linux C系統編程-線程互斥鎖(四)

    互斥鎖 互斥鎖也是屬于線程之間處理同步互斥方式,有上鎖/解鎖兩種狀態。 互斥鎖函數接口 1)初始化互斥鎖 pthread_mutex_init() man 3 pthread_mutex_init (找不到的情況下首先 sudo apt-get install glibc-doc sudo apt-get install manpages-posix-dev) 動態初始化 int pthread_...

    統計學習方法 - 樸素貝葉斯

    引入問題:一機器在良好狀態生產合格產品幾率是 90%,在故障狀態生產合格產品幾率是 30%,機器良好的概率是 75%。若一日第一件產品是合格品,那么此日機器良好的概率是多少。 貝葉斯模型 生成模型與判別模型 判別模型,即要判斷這個東西到底是哪一類,也就是要求y,那就用給定的x去預測。 生成模型,是要生成一個模型,那就是誰根據什么生成了模型,誰就是類別y,根據的內容就是x 以上述例子,判斷一個生產出...

    styled-components —— React 中的 CSS 最佳實踐

    https://zhuanlan.zhihu.com/p/29344146 Styled-components 是目前 React 樣式方案中最受關注的一種,它既具備了 css-in-js 的模塊化與參數化優點,又完全使用CSS的書寫習慣,不會引起額外的學習成本。本文是 styled-components 作者之一 Max Stoiber 所寫,首先總結了前端組件化樣式中的最佳實踐原則,然后在此基...

    精品国产乱码久久久久久蜜桃不卡