• <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基礎概念

    標簽: js基礎知識  javascript  前端

    js基礎知識

    一、js概述

    1.什么是js

    JS:javascript,簡稱為JS。它是一門前端編程語言,js是前端開發工程師的核心,在其中占據很高的比例。

    和html,css對比:
    相同:html,css,js代碼都可以在瀏覽器中運行, html,css,js它們的運行環境是瀏覽器
    不同點:html,css不是編程語言,js是編程語言。  js的運行環境不只是瀏覽器,還可以在其它的環境中運行。
    
    
    
    編程語言分類:
        前端語言:JS(瀏覽器上)...
        后端語言:Java C++ Python Go JS C# ...
    

    只有合適的場景使用合適的語言。

    2.js能做什么

    1)開發網站
    2)開發app
    3)小程序
    4)游戲開發:小程序游戲、網頁游戲
    5)寫后端 node.js
    6)嵌入式 c
    7)區塊鏈

    二、js三種引用方式

    js引用方式分為三種:內嵌式、外聯式和行內式

    1.內嵌式

    把js寫在html文件中,通常就寫在script標簽中

    <script>
        var a = 110;
        console.log(a)
    </script>
    

    2.外聯式

    <script src="./out.js"></script
    

    3.行內式

    <button onclick="console.log(888)">點我</button>
    

    三、JS的基本語法

    基本語法
    1)JS是區分大小寫 var a = 1; var A = 2;
    2)忽略空白符(其中包括空格、換行、tab)
    3)語句分號可加可不加
    4)注釋:單行注釋 // 多行注釋/* */ 注釋是給程序員看的,注意注釋的使用性以及正確性
    5)標識符 和 關鍵字 var a = 110; var 關鍵字 a變量名標識符
    6)…

    四、JS中的變量

    1.變量的分類

    變量中的主要有兩大分類:全局變量和局部變量

    全局變量:“在函數外定義的變量”,即從定義變量的位置到本源文件結束都有效。

    局部變量:“在函數內定義的變量”,即在一個函數內部定義的變量,bai只在du本函數范圍內有效。

    分界點:只要把變量寫在函數里面就是局部變量,只要寫在函數外面就是全局變量。
    
    <script>
        // 全局變量
        var address = "鄭州";
    
        // 定義函數 函數必須通過函數進行聲明
        function f() {
            // 函數內部的變量叫局部變量
            var m = 111; // 局部變量
        }
    
        if(true){
            var k = 123; // 全局變量 (因為沒有在函數里面)
        }
    
        for(var i=0; i<10; i++){  // i全局變量 (因為沒有在函數里面)
            var a = 666; // a是全局變量 (因為沒有在函數里面)
        }
    </script>
    

    數據:一個軟件打開后,界面上有很多的數據,也叫狀態,這個狀態可以保存在
    兩個地方,一個是內存,一個是硬盤
    項目運行起來,只有把數據加載到內存中,才使用使用數據。

        內存中的數據,一斷電,數據就沒了,
        還有一個地方,也可以保存數據,是硬盤,硬盤上的數據斷電是不會丟失的。
        內存空間地址:就是一塊內存空間的地址,可以通過地址操作它對應空間中的數據,使用地址來操作非常不方便,指針。
    

    變量:變量就是內存中的一個空間。
    變量名:內存空間的別名,對變量名的操作就是對內存空間的操作
    變量值:存儲在內存空間中的狀態(數據)

    2.變量的調用

    全局變量可以在局部對象中被訪問,但是局部對象不能在全局變量中被訪問

    <script>
        // 聲明一個變量
        var a = 110;
    
        // 聲明一個函數
        function f() {
            //在函數里面訪問全局變量
            console.log(a); //110
            var b = 666;  // 局部變量
    
            console.log(b);   //666  函數內部是可以訪問到局部變量
        }
    
        // 調用函數
        f();  // 一個函數沒有調用相當于這個函數沒有寫
    
        // 在函數外面訪問全局變量
        console.log(a);     //110
        console.log(b); //報錯:b is not defined  函數外面是訪問不了函數里面的變量
    </script>
    

    3.變量的聲明

    變量有單獨聲明,連續聲明和不使用var聲明

    <script>
        // 單獨聲明
        var name = "xiaoqiang";
        var age = 110;
        var address = "北京";
    
        // 連續聲明
        var m = 1, n = 2;
    
        // 不使用var
        k = 123; // 如果沒有加var 此時這個變量只能是全局變量 不管你是寫在函數內還是寫在函數外
    </script>
    

    五、JS中的數據類型

    為了更加合理使用內存空間,基本上所有的編程語言中都提出數據類型的概念,研究針對不同的數據,分配不同的空間。

    1)基本數據的類型:基本數據類型存儲在棧中
    ???number:數字, var a = 110; int a = 110;
    ???string:字符串 ,使用"",’'將字符串內容包裹起來。S中不分字符和字符串都叫字符串。
    ???boolean:布爾類型
    ???undefiend:沒有值
    ???null 沒有值
    2)引用數據類型:引用數據類型存儲在堆中
    ???object 對象
    ???array 數組
    ???function 函數 在JS中函數也是一種數據類型

    1.JS中的number數據類型

    1)number是一個數據類型,這個數據類型對應的值有無數個。
    2)在JS中number數據類型是不分整數和小數 都是number
    3)可以通過typeof查看一個變量值的數據類型,typeof是運算符。
    4)最大值 和 最小值(沒有最大值和最小值)
    5)number可以通過不同進制顯示。進制:10進制、、2進制、16進制、8進制。
    6)NaN(Not a Number): 不是一個數字
    7)JS中不要對小數運算,要運算先轉成整數,因為通常情況下得到的結果往往不對。
    
    <script>
        var a = 110; // 110是一個數據  這個數據的類型是number
        var b = 3.14; // 3.14也一個number數據
        console.log(a);
        console.log(typeof a)
        console.log(Number.MAX_VALUE)
        console.log(Number.MIN_VALUE)
    
        var c = 123; // 123是10進制
        var d = 0x123; // 16進制  0~f  以零x打頭
        console.log(d);  // 291
        var e = 0123; // 8進制  以零打頭    console.log(e);  // 83
    
        console.log("abc"*100) // NaN
    
        // == 是運算符  判斷兩則的數是否相等
        // 關系運算符  得到結果是true或false  1>2
        console.log((1-0.7) == 0.3)  // false
    </script>
    
    

    2.JS中的string數據類型

    1)在JS中 使用‘’ “”把字符串包起來 不包 JS會給它當成變量
    2)單引號不要嵌套單引號 雙引號不要嵌套雙引號 外單內雙 外雙內單
    3)string數據類型對應的數據有無數個

    <script>
        var addrss = beijing; //報錯 beijing is not defined, 因為沒有加引號
        console.log(addrss);
    
        var a = "hello "abc"js"      //報錯 Uncaught SyntaxError: Unexpected identifier 語法格式不對
    
        var a = "hello 'abc' js"
        console.log(a);
    
    </script>
    

    3.JS中的boolean數據類型

    boolean數據類型對應的值就兩個true、false;true 和 True 不一樣的 JS是區分大小寫的

    <script>
        var b = true;
        console.log(b);
        console.log(typeof b);
    </script
    

    4.JS中的undefined數據類型

    undefiend是一個數據類型,這種數據類型對應的值是undefiend。當一個變量沒有賦值,它的值是undefiend,這個值的類型是undefiend。

    <script>
        var a;
        console.log(a);  // undefined 值
        console.log(typeof a);  // undefined 是類型
    </script>
    

    六、JS中的數據類型轉化

    數據類型轉化:
    ??隱式類型轉化:靜悄悄地,不知不覺地就進行了類型轉化
    ??強制類型轉化:寫代碼進行轉化

    前提:在JS中,運算符兩側需要保存數據類型一致,如果不一致,JS解釋器會幫你把一個數據類型轉成另一個數據類型。
    
    <script>
        //隱式類型轉化
        var res = 123 + "abc";  // 123隱式轉化成字符串
        console.log(res);  // 123abc
        console.log(typeof res);  // string
    
        var isMerry = true;
        if(isMerry){  // 語句
            // 如果if后面的()里面是true 執行{}里面的代碼
            console.log("結婚了....")
        }else{
            console.log("沒有結婚....")
        }
    
        var isLove = "";
        // if后面的小()里面要么放true 要么放false
        // if后面小()里面放了一非布爾類型的值,也會進行隱式類型轉化
        if(isLove){
            console.log("是真愛");
        }else{
            console.log("是騙子");
        }
    
        // 1>2  沒有類型轉化  > 運算符  關系運算符 返回的就是布爾值
        // if(1>2){}
    
        // 強制類型轉化
        console.log(parseInt(3.14)); // 把小數轉成整數
        console.log(parseInt("3.14abc")); // 嘗試把小數或非數字轉成整數
        console.log(parseFloat(3))     //3
        console.log(parseFloat("3.14abc"))  //3.14
        console.log(Number("abc123"))  // NaN
        console.log(Number("123abc"))  // NaN
        console.log(Number("123"))  // 123
        console.log(String(123456))  // 123456
    </script>
    
    在JS中,下面的值轉成false,其它值都轉成true:0  -0 ""  undefiend null
    

    七、JS代碼在執行時分兩個階段

    JS代碼在執行時分兩個階段:
    1)預編譯
    2)代碼執行

    1.預編譯

    預編譯: 提升(將需要提升的代碼,放在代碼段的最前面,首先執行)

    一個script標簽就是一個代碼段。JS代碼在執行時,是一個代碼段一個代碼段執行。

    ??1)把加var的變量進行提升,變量聲明會提升,變量的賦值不會提升

    定義 = 聲明 + 賦值
    
    例子:var a = 4;
    定義:var a = 4;
    聲明:var a;
    賦值: a = 4;
    

    ??2)把使用function聲明的函數進行提升 提升的是整個函數聲明

    <script>
         console.log(a);  // undefined  變量提升了聲明
         var a = 110;
         console.log(a); // 110    變量進行了賦值
    
        f();    //f... 因為函數整體進行了提升
        // 使用function聲明了一個函數
        // 函數名是f  函數值是{}
        // 定義了一個函數f
        function f() {
            console.log("f...")
        }
    </script>
    

    小案例:

    <script>
        console.log(a); // undefined
        var a = 110;
        console.log(a);  // 110
    
        console.log(i); // undefined 因為i是全局變量,預編譯時,對i的聲明進行了提升
        for (var i=0; i<3; i++){ }
        console.log(i);     // 3
    
        // var i=0; 全局變量
        for(var i=0; i<3; i++){
            console.log(i);    //0 1 2 
        }
    
        // ++在前和++在后,對于b的值來說,都是加1操作
        // 整體也有一個值 此時++在前和++在后就不一樣
         var b = 0;
         var r1 = b++; // i++整體也有一個值
         var r2 = ++b;  // ++i整體也有一個值
         console.log(b); // 2 
         console.log(r1); //0  ++在后,整體的值是一個舊值  0
         console.log(r2); //2  ++在前,整體的值是一個新值
    </script>-->
    

    2.執行

    代碼的執行:
    一行一行執行

    八、初步了解執行上下文( Execute Context)

    1)執行上下文( Execute Context):EC

    EC的作用:給代碼提供數據
    

    代碼分兩類:
    1)全局代碼:函數外面的代碼叫全局代碼
    2)函數代碼:一個函數就是一個局部代碼

    2)全局執行上下文:全局代碼在執行時時,就會產生全局的EC。 EG(G)
    3)局部執行上下文:函數代碼在執行時,就會產生局部的EC。調用多少個函數就產生多少個EC。

    EC棧:
        棧:杯子
        每產生一個EC就會放到杯子中,說白了,就是杯子中放雞蛋。
        棧:先放進去的后出來
    

    案例:

    <script>
        window.alert("hello js");
    
        var n = 100;
        console.log(n);
        // window是一個全局對象  只要是一個全局變量或全局函數都會掛載到window上
        console.log(window.n);
    
        m = 200;  // 全局變量
        console.log(m)
        console.log(x)
    </script>
    

    九、加var的變量和沒有加var的變量的區別

    1)在全局代碼中,加var會提升,沒有var的不會提升
    2)不管加沒加var的全局變量,都會作為window的屬性
    3)沒有加var的變量,只能作為全局變量,只要是全局變量,肯定是window的屬性
    4)加var的局部變量,不會作為window的屬性

    <script>
        // 1)在全局代碼中,加var會提升,沒有var的不會提升。
        console.log(a);
        a = 110;  // a is not defined
    
        // 2)不管加沒加var的全局變量,都會作為window的屬性
        var a = 1;
        b = 2;
        console.log(window.a)   //1
        console.log(window.b)   //2
    
        // 3)沒有加var的變量,只能作為全局變量,只要是全局變量,肯定是window的屬性
        function f() {
            a = 666;
        }
        f();
        console.log(window.a);  //666
    
        // 4)加var的局部變量,不會作為window的屬性
        function f() {
            var a = 666;
        }
        f();
        console.log(a); //666
        console.log(window.a) // undefined 訪問一個對象上不存在的屬性,結果就是undefined
    </script>
    

    十、有關EC(G),VO,GO的例題

    案例01

    1.代碼
    <script>
        var n = 100;
        console.log(n);  // 100
        console.log(window.n);  // 100
        m = 200;  // 只會放到GO中
        console.log(m);  // 從GO拿  寫全 window.m  window省略了
        console.log(x);  // GO和VO中都沒有*/
    
    </script>
    
    2.運行結果

    在這里插入圖片描述

    3.原理

    在這里插入圖片描述

    解析:函數編譯時,var n;發生提升,然后n進行初始化,存儲在EC(G)和GO里面,第一個輸出結果為100。因為m沒有使用var進行定義,所以,var只存在GO里面,第二個輸入結果為200。x沒有進行定義,直接輸出x會發生報錯,提示x is not defined(x沒有定義)。最終輸出結果為:100 200 x is not defined。

    案例02

    1.代碼
    <script>
        console.log(a,b); 
        if(true){
            // 看到var就提升
            var a = 1;
        }else{
            // 看到var就提升
            var b = 2;
        }
        console.log(a,b); 
    </script>
    
    2.運行結果

    在這里插入圖片描述

    3.原理

    在這里插入圖片描述

    解析:因為a,b都在函數外面,所以均為全局變量,代碼進行編譯時,將a和b的聲明提升,不提升變量賦值,第一行輸出結果為 undefined undefined。if條件為真值,所以將1賦值為a,不執行else里面的代碼。最終執行結果為undefined undefined 1 undefined。

    案例03

    1.代碼
    <script>
    var a = 1;
        var b = "hello";
        function f()
        {
            console.log("f...")
        }
        window.f();
        // 數組
        var arr = [1,2,3];
    </script>
    
    2.原理

    在這里插入圖片描述

    解析:基本數據類型存儲在棧中,函數引用類型存儲在堆中。

    案例04

    1.代碼
    <script>
        function f(a) {
            // a是函數內部的局部變量
            console.log(a) // 111
        }
        f(111); // 函數調用的過程就是給形參賦值的過程
        console.log(a); // a is not defiend
    </script>
    
    2.運行結果

    在這里插入圖片描述

    3.原理

    在這里插入圖片描述

    解析:將實參賦值給形參,即將111傳給a,輸出a的數值111。因為a是局部變量,所以找不到a的值最終會報錯。

    十、了解函數

    函數是任何編程語言都有概念。
    在JS中定義函數有兩種形式: 函數定義, 函數表達式。

    函數定義 f叫函數名 ()是函數特有的標識 {} 叫函數體

    函數調用:函數名+(參數),參數值可有可無。調用函數時,就會把函數體中的代碼都執行了。

    函數的返回值是返回到了函數調用處

    給函數傳遞數據。形參就是函數內部的局部變量。函數調用的過程就是實參向形參賦值的過程。

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

    智能推薦

    shiro_day01 shiro基礎概念和代碼

    基礎概念 shiro :安全管理框架 Subject : 需要驗證的實體類,也充當shiro框架對外的接口 securityManager : 安全管理器,shiro框架的核心,負責調用其他模塊進行授權認證 authenticator :認證器,一般用于登錄時使用 authorizer :授權器,驗證是否有權限 realm :用戶與權限的域 sessionManager :會話管理器,可用于實現單...

    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 所寫,首先總結了前端組件化樣式中的最佳實踐原則,然后在此基...

    基于TCP/IP的網絡聊天室用Java來實現

    基于TCP/IP的網絡聊天室實現 開發工具:eclipse 開發環境:jdk1.8 發送端 接收端 工具類 運行截圖...

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