荐 js简单整理

2022-08-02,,

初识js

    • 1.什么是js
    • 2.JS三种写法
    • 3.JS的基本语法
    • 4.JS中的变量
    • 5.JS中的数据类型
      • 1.JS中的number数据类型
      • 2.JS中的string数据类型
      • 3.JS中的boolean数据类型
      • 4. JS中的undefined数据类型
    • 6.JS中的数据类型转化
    • 7. 什么是代码段
    • 8.JS代码在执行时分两个阶段
    • 9.初步了解执行上下文( Execute Context (EC))
    • 10.加var的变量和没有加var的变量的区别
    • 11.了解函数
    • 12.let和const声明变量
      • let声明变量
      • const声明常量
    • 13.堆内存和栈内存的理解

1.什么是js

JS:javascript 简称为JS 它是一门编程语言

编程语言分类:
前端语言:JS(浏览器上)…
后端语言:Java C++ Python Go JS C# …
只有合适的场景使用合适的语言。 JS JAVA C++

js能做什么:
1)开发网站
2)开发app
3)小程序
4)游戏开发 小程序游戏 网页游戏
5)写后端 node.js
6)嵌入式 c
7)区块链


<script>
  var a=110;
  var a=200;
  conosle.log("hello world")
</script>

2.JS三种写法

1)把js写在html文件中 学习时通常就写在script标签中(内部写法)
2)把JS写在JS文件中,然后在html文件中通过script标签引入 写项目时通常会把JS写在一个单独的文件中(外部写法)
3)把JS代码写在开始标签中,当成开始标签的属性(行内写法)

行内样式:


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

3.JS的基本语法

基本语法:
1)JS是区分大小写 var a = 1; var A = 2;
2)忽略空白符(空格 换行 tab)
3)语句分号可加可不加
4)注释 单行注释 多行注释 注释是给程序员看的
5)标识符 和 关键字 var a = 110; var 关键字 a变量名标识符
6)…

4.JS中的变量

变量:变量就是内存中的一个空间。

变量名:内存空间的别名 对变量名的操作就是对内存空间的操作
变量值:存储在内存空间中的状态(数据)

在JS中,如何定义变量:

var a = 110; // 定义了一个变量 变量的名是a 变量的值是110;

变量的分类:

1)全局变量
2)局部变量
分界点是:函数
只要把变量写在函数里面就是局部变量,只要写在函数外面就是全局变量.

全局变量和局部变量有什么特点:

1)全局变量可以在函数内部都能访问到
2)局部变量只能在函数内部访问到

5.JS中的数据类型

为什么需要数据类型?

为了更加合理使用内存空间,基本上所有的编程语言中都提出数据类型的概念,研究针对不同的数据,分配不同的空间。

JS中的数据类型:

基本数据的类型:

number 数字 var a = 110; int a = 110;
string 字符串 ”“ ‘’ JS中不分字符和字符串 都叫字符串
boolean true false 布尔类型
undefiend 没有值
null 没有值

引用数据类型:

object 对象
array 数组
function 函数 在JS中函数也是一种数据类型

1.JS中的number数据类型

  1. number是一个数据类型,这个数据类型对应的值有无数个。
  2. 在JS中number数据类型是不分整数和小数 都是number
  3. 可以通过typeof查看一个变量值的数据类型
  4. 最大值 和 最小值
  5. number可以通过不同进制显示 进制 10进制 2进制 16进制(以0x打头的) 8进制(以0打头的)
  6. NaN Not a Number 不是一个数字
  7. JS中不要对小数运算 要运算先转成整数 得到的结果往往不对

在JS中,说到数据类型,主要指变量值的数据类型。
typeof是运算符 + - * / 都是运算符
Number叫类,也叫构造器,也叫函数

2.JS中的string数据类型

  1. 在JS中 使用‘’ “”把字符串包起来 不包 JS会给它当成变量
  2. 单引号不要嵌套单引号 双引号不要嵌套双引号 外单内双 外双内单
  3. string数据类型对应的数据有无数个

注:SyntaxError表示语法错误

3.JS中的boolean数据类型

  1. boolean数据类型对应的值就两个 true false
  2. true 和 True 不一样的 JS是区分大小写的

4. JS中的undefined数据类型

  1. undefiend是一个数据类型,这种数据类型对应的值是undefiend
  2. 什么时候会出现undeined?
    答:一个变量没有赋值 它的值是undefiend 这个值的类型是undefiend

6.JS中的数据类型转化

数据类型转化:

隐式类型转化:静悄悄地,不知不觉地就进行了类型转化
强制类型转化:写代码进行转化

在JS中,下面的值转成false,其它值都转成true:

0 -0
“”
undefiend
null

前提:在JS中,运算符两侧需要保存数据类型一致,如果不一致,JS解释器会帮你把一个数据类型转成另一个数据类型。

隐士类型转化

<script>
    var res=123+"abc";
    console.log(res);//123abc
    console.log(typeof res)//string
</script>

注:一个运算符如果有两个操作数,这个运算符叫二元运算符,也叫二目运算符.运算符你要保证两侧操作数的数据类型要一致

强制类型转化

<script>
    console.log(parseInt(3.14));//3把小数转成整数
    console.log(parseInt("3.14abc"))//3 尝试把小数或非数字转成整数
</script>

7. 什么是代码段

一个script标签就是一个代码段。
JS代码在执行时,是一个代码段一个代码段执行。

8.JS代码在执行时分两个阶段

  1. 预编译
  2. 代码执行
    每一个阶段做的事情是不一样的。

预编译: 提升

把加var的变量进行提升 变量声明会提升 变量的赋值是不会提升提升到了代码段最前面把使用function声明的函数进行提升 提升的是整个函数声明

注:定义 = 声明+赋值

9.初步了解执行上下文( Execute Context (EC))

概念:当代码运行时,会产生一个对应的执行环境,在这个环境中,所有变量会被事先提出来(变量提升),有的直接赋值,有的为默认值 undefined,代码从上往下开始执行,就叫做执行上下文。

代码分两类:
全局代码 函数外面的代码叫全局代码
函数代码 一个函数就是一个局部代码

全局执行上下文:
全局代码在执行时时,就会产生全局的EC。 EG(G)
局部执行上下文:
函数代码在执行时,就会产生局部的EC。调用一个函数就产生一个EC,调用100个函数,就产生100个EC。

ECStack 执行上下文栈
EC(G) 全局执行上下文 存储全局的加var 加function的数据存储在VO中
VO 变量对象 存储的全局的加var 或 加function
EC(f) 函数执行上下文 存储局部的加var 或 加funciton的局部数据
AO 活动对象 存储局部的加var 或 加function的局部数据
GO 全局对象
默认情况下,里面就存储了很多东西
全局的数据,加Var的全局数据,加functon的全局数据,不加var的变量都会存储到GO中的

10.加var的变量和没有加var的变量的区别

  1. 在全局代码中,加var会提升,没有var的不会提升。
  2. 不管加没加var的全局变量,都会作为window的属性
  3. 没有加var的变量,只能作为全局变量,只要是全局变量,肯定是window的属性.
  4. 加var的局部变量,不会作为window的属性
    对象 是集合 放一堆的数据 变量里放一个数据
    in是一个运算符 用来判断一个对象有没有一个属性

11.了解函数

  1. 在JS中定义函数有两种形式
    函数定义
    函数表达式
  2. 函数定义
    f叫函数名
    ()是函数特有的标识
    {} 叫函数体
  3. 函数调用
    调用函数时,就会把函数体中的代码都执行了
  4. 函数的返回值
    函数的返回值是返回到了函数调用处
    一个函数如果没有返回值,默认返回undefiend

 <script>
  function f(){
            return 666;
        }
        var a=f();
        console.log(a);//666
        console.log(f())//666
 </script>

  1. 给函数传递数据

<script>
     function f(a,b){//a,b叫做形式参数  形参
        //形参就是函数内部的局部变量
        return a+b;
    }
    var r=f(1,2); //1 2叫实际参数 实参
    console.log(r) //函数调用时就是实参向形参赋值的过程
</script>

12.let和const声明变量

let声明变量

  1. let声明的变量没有提升(let声明的变量也提升,仅仅是没有初始化)
  2. let 配合 {} 也可以形成块级作用域
  3. 使用let声明的变量不会挂载到GO上
  4. 使用let不能重复声明

注:不要使用var来定义变量 使用let声明变量

const声明常量

  1. const也没有提升
  2. 也会形成块级作用域
  3. 使用const声明的常量不会挂载到GO上
  4. 使用const不能重复声明
  5. const在声明常量时,必须赋值

13.堆内存和栈内存的理解

变量存储位置

  1. 栈(stack):栈会自动分配内存空间,会自动释放,存放基本类型,简单的数据段,占据固定大小的空间。(基本类型:String,Number,Boolean,Null,Undefined)

  2. 堆(heap):动态分配的内存,大小不定也不会自动释放,存放引用类型,指那些可能由多个值构成的对象,保存在堆内存中,包含引用类型的变量,实际上保存的不是变量本身,而是指向该对象的指针。(引用类型:Function,Array,Object)

<scirpt>
        var a=10;
        var b=a;
        b=11;
        console.log(a);//10
</scirpt>

<scirpt>
        var a={n:12};
        var b=a;
        b.n=13;
        console.log(a.n);//{n:13}
</scirpt>

<scirpt>
        var a={m:666};
        var b=a;
        b={m:888};//在这里,堆有创建了一个新的地址储存m:888;
        console.log(a,m);//{m:666}
</scirpt>

注:第一个代码在栈中改变了b的值而未改变a的值
第二个代码是b没有创建新的地址堆,在堆中改变了a与b共同地址中的值
第三个代码是b创建了一个新的地址堆,没有改变a的值
第一个是基本数据类型,存入了栈中
第二个和第三个是引用数据类型,存入了地址堆中

内存分配

一般来说栈内存线性有序存储,容量小,系统分配效率高。而堆内存首先要在堆内存新分配存储区域,之后又要把指针存储到栈内存中,效率相对就要低一些了。

垃圾回收

垃圾回收方面,栈内存变量基本上用完就回收了,而推内存中的变量因为存在很多不确定的引用,只有当所有调用的变量全部销毁之后才能回收

本文地址:https://blog.csdn.net/kaniboy/article/details/107371213

《荐 js简单整理.doc》

下载本文的Word格式文档,以方便收藏与打印。