自学前端-初识JavaScript之ECMAScript

142 阅读4分钟

JavaScript是一种脚本语言-编程语言:

  • 编程语言(Programming Language):可以通过类似人类语言的“语言”来控制计算机,让计算机来时间我们的目的。
  • JavaScript是布兰登 艾奇(神奇大哥)在1995年利用10天时间设计出来的。
  • JavaScript是运行在客户端的脚本语言(不需要编译,运行过程中由js解释器逐行进行解释并执行)。
  • JavaScript是一种弱语言,意味着不用提前声明变量的类型,在程序运行过程中,类型会被自动确定。在代码运行时,JS引擎根据=右边变量的值的数据类型判断变量的数据类型,运行完毕后,变量就确定了数据类型。
  • JS是动态语言,变量的数据类型是可以变化的。

编程语言和标记语言的区别:

  • 编程语言有很强的逻辑和行为能力。
  • 标记语言(html)不用于向计算机发出指令,常用于格式化和链接。

ECMAScript:规定了JS的编程语言和基础核心知识。

JS的书写位置:

  1. 行内式
  2. 内嵌式
  3. 外部式

JS输入和输出语句

屏幕快照 2022-07-02 上午12.37.46.png

变量:

  • 变量是用于存放数据的容器。我们通过变量名获取数据。
  • 变量本质是在内存中申请的一块用于存放数据的空间。 在JS中声明变量用var

屏幕快照 2022-07-02 上午12.41.37.png

  • var是一个JS关键字,用来声明变量,使用var声明变量后,计算机会自动为变量分配内存空间。

用var声明多个变量时

只需要写一个var,多个变量名之间用逗号隔开。

屏幕快照 2022-07-02 上午12.44.48.png

声明变量时的特殊情况:

屏幕快照 2022-07-02 上午12.45.31.png

变量名的命名规范:

  • 由字母、数字、下划线、美元符号组成。
  • 不能以数字开头、区分大小写、不能是关键字。
  • 遵守驼峰命名法。

简单数据类型

屏幕快照 2022-07-02 上午12.56.56.png

  • isNaN();用来判断变量是否是数字,返回布尔值

字符串转义符:

屏幕快照 2022-07-02 上午1.00.03.png

  • 检测字符串的长度:str.length。
  • 字符串拼接 用+号(字符串+任何类型,拼接后是一个新的字符串。) alert('hello' + 'word'); alert('hello '+变量+'word');//字符串拼接变量
  • Undefined代表为定义的类型
  • 检测数据类型(typeof): var num = 10; alert(typeof num);

数据类型的转换

  1. 转换为字符串类型:

屏幕快照 2022-07-02 上午1.10.11.png 2. 转换为数字型:

屏幕快照 2022-07-02 上午1.11.29.png 3. 转换成布尔型:

屏幕快照 2022-07-02 上午1.13.00.png

  • 代表空、否定的值('',0,NaN,null,undefined)会被转换成false。
  • 其余的值都会被转换成ture

运算符

  1. 算术运算符:

屏幕快照 2022-07-02 上午1.16.08.png 2. 比较运算符:

屏幕快照 2022-07-02 上午1.17.32.png 3. 逻辑运算符:

屏幕快照 2022-07-02 上午1.18.52.png 4. 赋值运算符:

屏幕快照 2022-07-02 上午1.20.10.png 5. 逻辑运算符的优先级:

屏幕快照 2022-07-02 上午1.21.20.png

流程控制分支

  1. ifelse语句:
  • if(条件){执行语句}else{执行语句}
  • 根据判断条件实行分支执行。
  1. 三元表达式: 条件表达式?表达式1:表达式2
  2. swich语句 swich(表达式){ case value1: 执行语句1; break; case value2: 执行语句2; break; ... default: 执行最后的语句; }

循环语句

  1. for循环 输出0-10 for(var i=0; i<10; i++){console.log(i);}
  2. while循环 输出0-10: var i = 0; while(i<11){console.log(i);i++;}
  3. do while循环 输出0-10: var i=0; do{console.log(i);}while(i<11){i++;console.log(i);}

复杂数据类型

1. 数组

Array

  • 利用new创建数组 var arr = new Array();
  • 利用字面量创建数组 var arr = [1,2,3];
  • 访问数组元素根据下表访问: arr[index];(数组的下表从0开始)
  • 数组的长度: arr.length;
  • 冒泡排序原理:

屏幕快照 2022-07-02 上午1.43.18.png

数组的一些方法

    1. 检测是否为数组方法 (arr instanceof Array) arr.is Array();
    1. 添加删除数组元素方法

屏幕快照 2022-07-02 下午3.51.09.png

  • 3. 数组排序方法

屏幕快照 2022-07-02 下午3.54.36.png

    1. 数组索引方法

屏幕快照 2022-07-02 下午3.55.22.png

    1. 数组转换字符串方法

屏幕快照 2022-07-02 下午3.56.34.png

    1. 数组拼接和截取方法

屏幕快照 2022-07-02 下午3.57.50.png

2. 对象

  • 声明对象的方法:
  1. var obj = {};
  2. var obj = new Object();

函数

  • 函数的声明
  1. function 函数名(形参1,形参2,...){}
  2. var fun = function(){}
  • 函数的调用
  1. 函数名(实参1,实参2,...);
  2. fun();
  • 形参和实参匹配:
  1. 如果实参大于形参的个数,函数会取到形参的个数,其他的不管。
  2. 如果形参的个数大于实参个数,没有接收值的形参就是underfined。
  • 函数的返回值:
  1. 如果有return则返回return后面的值;
  2. 如果函数没有return返回undefined。
  • arguments
  1. 当我们不确定有多少个参数传递的时候,可以用arguments来获取。arguments是一个伪数组。

构造函数:

function Star(uname){this.name = uname}

  • 构造函数名字首字母要大写;
  • 构造函数不需要return就可以返回对象
  • 调用构造函数必须使用new;
  • 只要new依次就创建一个对象;
  • 属性名和方法签名必须加this。 构建函数创建对象: var star = new Star(uname);
  • new关键字执行过程
    1. new构造函数可以在内存中创建一个空的对象;
    1. this就会指向刚才创建的空对象;
    1. 执行构造函数里面的代码,给这个空对象添加属性和方法;
    1. 返回这个对象;

内置对象

数学对象Math

屏幕快照 2022-07-02 上午2.23.44.png

随机数方法:

random();返回一个0<x<1的随机的小数

日期对象

  • Date对象是基于1970年1月1日(世界标准世界)
  • var dat = new Date();
  • 获取日期的总毫秒数(时间戳) dat.valueOf(); dat.getTime(); var date1 = +new Date();

字符串操作方法

屏幕快照 2022-07-02 下午4.04.22.png

  • 字符串替换方法:replace() var str = 'abc';
    str.replace('a','d');
  • 字符串转换为数组split() var str = 'a|b|c'; var arr = str.split('|'); ->arr = [a,b,c];

为什么字符串能用属性和方法?

  • 因为基本包装类型
  • 把简单数据类型,包装成为复杂数据类型
字符串的值是不可变的,改变值或者拼接字符串是开辟了新的地址

JavaScript作用域

指变量在某个范围内起作用和效果,目的是为了提高程序的可靠性更重要的是减少命名冲突。

  1. 全局作用域
  2. 局部作用域(函数作用域,在函数内部起作用和效果)
  • 根据作用域不用变量分为全局变量和局部变量。

JavaScript作用域链

根据在内部函数中可以访问外部函数变量的机制,用链式查找决定哪些数据能被内部函数访问,就称为作用域链。

JavaScript预解析

JS解析器在运行JS代码时分为两步:预解析和代码执行。

  • 预解析:JS引擎会把JS里面所有的var和function提升到当前作用域的最前面。
  • 代码执行:按照代码书写的顺序从上往下执行。

数据类型内存分配

屏幕快照 2022-07-02 下午4.10.51.png

堆和栈

屏幕快照 2022-07-02 下午4.11.27.png

简单数据类型传参

屏幕快照 2022-07-02 下午4.16.36.png

复杂数据类型传参

屏幕快照 2022-07-02 下午4.15.51.png