JavaScript-介绍、特点、用途、引入方式、语法格式、运算符、流程控制-判断 循环 分支、函数、作用域、数组、自定义对象、函数、正则、闭包*、柯里化*、对象作函参、新增内容

1 概述

1.1JavaScript的介绍

  • 前身是LiveScript+JavaScript
  • 基于浏览器的脚本语言
  • 基于对象,面向对象的一个编程语言

1.2 EcmaScript

  • EcmaScript就是把LiveScript和JavaScript做了合并的一种规范
  • 我们现在使用的就是EcmaScript5

1.3 特点

  1. 简单、易学、易用;
  2. 跨平台;IE、Navigator
  3. 符合ECMA(欧洲计算机制造协会)标准,可移植;
  4. 事件驱动式的脚本程序设计思想;
  5. 动态、交互式的操作方式。

1.4 用途

  1. 交互式操作;
  2. 表单验证;
  3. 网页特效;
  4. Web游戏
  5. 服务器脚本开发等。

1.5 编写工具

  • vscode、webstorm

1.6 执行平台

  • 浏览器

注意:Java与JavaScript没有关系

  • java是面向对象的语音(编译型)(强类型)
  • JavaScript是面向对象和基于对象的语言(解释型)(弱类型)

2 JavaScript的引入方式

2.1 网页内部编写js代码

  • 方便编写,不能达到复用效果
  • 后期的维护变得复杂了
  • 所以生产环境不建议这么来玩
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>js的编写</title>

    <!--在网页内部编写js代码-->
    <script type="text/javascript">
        alert("hello")
    </script>
</head>
<body>
</body>
</html>

2.2 外部引入

<script src="base.js"></script>
  • 引入外部的js一定要是script双标签
  • 在script双标签中绝对不能写js代码
  • script不能互相嵌套

3 语法格式

  • JavaScript区分大小写
  • JavaScript脚本程序须嵌入在HTML文件中;
  • JavaScript脚本程序中不能包含HTML标记代码
  • 每行写一条脚本语句,如果一行一条语句则可以省略末尾的分号,如果一行写了两条语句,则需要添加分号;

3.1 js的核心

javascript = ecmascript(js的基础语法)+dom(文档对象模型)+bom(浏览器对象模型)

3.2 数据类型

  • 数值(Number)
  • 布尔(Boolean)
  • 字符串值(String)
  • 空值(Null)
  • 未定义(undefined)

3.3 变量

3.3.1 什么是变量

变量就是用来在内存中存储数据的;

3.3.2 如何定义变量

var 变量名称 =;

3.4 标识符

  • 标识符就是给变量 方法 函数 类 对象命名的
  • 数字 字母 下划线 $组成
  • 不能以数字开头
  • 标识符一定要做到见名知意

3.5 命名法

命名法示例常用的地方
帕斯卡命名方法(大驼峰命名法)UserName
骆驼命名法(小驼峰命名法)userName对象,变量,方法,函数
前缀命名法mUserName对象,变量,方法,函数
程序猿命名法(下划线命名法)user_name对象,变量,方法,函数
  • 在同一个项目中,尽量选择其中的两种使用
  • 一般建议选择 大驼峰命名法+小驼峰命名法 = 驼峰命名法

4 表达式

  • 表达式就是由数字、运算符、括号组成的;
  • 表达式是能求得具体的结果的;
10: 是表达式,是数值表达式
"hello": 是表达式,是字符串表达式
a+b:是表达式 值表达式
a+b>30: 是表达式  值表达式  布尔值表达式  布尔表达式
var a=10(不是表达式);  a=20(是赋值表达式);
var a = 20;不是表达式,(变量的定义不是表达式)
var c = a + b;不是表达式,(变量的定义不是表达式)

5 运算符

  • 优先级:()>!>数学>关系>逻辑>赋值
  • ps:当无法确定优先级的时候可以用括号来控制。

5.1 数学运算符

+ - * /

5.2 关系运算符

  • == 只判断值不判断类型
  • ===判断值以及类型
> < >= <= == === !=

5.3 逻辑运算符

&&:两个表达式都为true时结果才是true
||:只要有一个为true则结果就为true
!: 取反

5.4 位运算符(了解)

  &  |  !  ^  >>  >>>

5.5赋值运算符

  =  +=  -=   *=  /=  %=

5.6 三元运算符(三目运算符)

  布尔表达式?"表达式1":"表达式2";
  
  判断布尔表达式是否成,如果成立,则返回表达式1,否则返回表达式2

5.7 自增 自减

6 流程控制

6.1 判断

if…

if(布尔表达式){
    代码块
}
so:判断布尔表达式是否成立,如果成立则执行代码块

if…else…

if(布尔表达式){
    代码块1
}else{
    代码块2
}
so:判断布尔表达式是否成立,如果成立则执行代码快1,否则执行代码快2

if…else if…else

if(布尔表达式1){
    代码块1
}else if(布尔表达式2){
    代码块2
}else{
    代码块3
}
so: 上面的代码块只会执行一个;

6.2 循环

while循环

while(布尔表达式){
	代码块
}

dowhile循环

do{
	代码块
}while(布尔表达式);

for循环

for(变量的定义;循环条件;改变循环条件的表达式){
	代码块;
}

6.3 分支switch

switch (){
	case1:
		代码块1;
		break;
	case2:
		代码块2;
		break;
	case3:
		代码块3;
		break;
	default:
		代码块4;
		break;
}

7 函数

7.1 定义

  • 函数: 对功能的封装
  • 四要素:函数名 形参列表 函数体 返回值
function 函数名称(形参列表){
	函数体
}

7.2函数的调用:

函数名称(实参)

8 变量的作用域

  • 全局变量: 在全局定义的变量称为全局变量,可以在任意的地方使用
  • 局部变量: 在代码块中定义的变量,只能在其定义的作用域使用
<script>
    var a = 10;  /*全局变量*/
    console.log("-----", a);


    function func1() {
        var name = "admin";
    }

    func1();
    console.log("+++++",name); /*局部变量全局不能使用*/
</script>

<script>
    console.log(a);  /*使用上面script中定义的全局变量*/
</script>

9 数组

  • 可以存储多个数据元素的集合

9.1 数组的创建

var ages = new Array(10, 20, 30, 40);  /*定义数组时直接初始化*/
console.log(ages);

var ages1  =  new Array(3);  /*传递一个参数代表的是数组的长度*/
console.log(ages1);

var ages2 =  [];  /*数组的定义,定义一个空数组,建议使用这种方式*/
console.log(ages2);

9.2 修改数组中的元素

var ages = [];
ages[2] = 20;
ages[2] = 10;  /*使用下标修改数组元素*/

9.3 数组的遍历

  • for
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>for循环进行数组遍历</title>
</head>
<body>
<script>
    // 定义数组
    var ages = [10,30,40,20,60];
    var len = ages.length;

    for(var i = 0; i < len; i++){
        console.log(ages[i]);
    }
</script>
</body>
</html>
  • while
<script>
    // 定义数组
    var ages = [10,30,40,20,60];

    var len = ages.length;

    var temp = 0;
    while(temp < len){
        console.log(ages[temp]);
        temp++;
    }
</script>
  • for in
	var ages = [10,30,40,20,60];
    // for in 里边的i是全局变量
    for(var i in ages){
        console.log(i);
        console.log(ages[i]);
    }
    console.log(i);
  • foreach
	ages.forEach(ages=> {
        console.log(ages);
        }
    )

9.4 数组实现映射

var mapData = [];
mapData["name"] = "admin";
mapData["age"] = 20;
mapData[0] = 100;
//数组的遍历   不能使用普通的for循环和while进行遍历
for(var i in mapData){
	console.log(mapData[i]);
}

9.5 二维数组

<script>
    var data = [[1,2,3],[4,5,6]];

    // 二维数组的遍历
    for(var i in data){
        for(var j in data[i]){
            console.log(data[i][j]);
        }
    }
</script>
  • 注意:二维数组还解决不了的问题需要重新思考,不敢在增加维度了

9.6 数组实现栈

  • push:尾部追加
  • pop:尾部移除
  • shift:头部移除
  • unshift:头部追加
<script>
    var data = [];
    
    data.push(10,20,30);// push尾部追加
    data.push(40);
    console.log(data);
    data.pop();// pop尾部移除
    console.log(data);

</script>

9.7 数组实现队列

<script>
	var data = [];
    
    data.push(10,20,30);// push尾部追加
    data.push(40);
    console.log(data);
    data.shift();// shift头部移除
    console.log(data);
</script>

10 自定义对象

var name = "admin";
//对象的定义
var obj = {
    name,
    age: 20,
    sex: '男'
};

//给对象动态的添加属性
obj.address = "陕西省西安市"

//对象属性的访问
console.log(obj.address);

11 函数

11.1 函数的定义及使用

function 函数名(形参列表){
	函数体;
}
<script>
    function func1(){
        console.log("func1...");
    }
    func1();
</script>

11.2 匿名函数

  • 函数是可以没有函数名称的;

  • 把没有函数名称的函数称为 “匿名函数”

  • js中的函数也是对象

  • 匿名函数一定要先定义再使用

//匿名函数
  var func2 = function () {
      console.log("匿名函数");
  }
  
  //匿名函数的调用
  func2();
  • 函数也可以作为对象的属性
	var obj = {
		name: "admin",
		age: 20,
		//对象的属性也可以是函数对象
		say: function () {
	    console.log(this.name + "::" + this.age);
		}
	}
	
	//对象属性的调用
	obj.say();

12 字符串的操作

  var str = "hello xzy";
  //截取指定位置的字符
  console.log(str.charAt(1));
  //字符串的拼接(原来的str这个字符串是不会发生变化的)
  var str1 = str + "java大数据"
  //判断是否以指定的字符结尾  返回boolean类型
  console.log(str.endsWith("1xzy"));
  //判断是否以指定的字符串开头
  str.startsWith("he");
  //字符串的长度
  console.log(str.length);
  //去掉字符串首尾的空格
  console.log(str.trim().length);
  //指定字符在字符串中首次出现的位置
  console.log(str.indexOf("l"));
  //指定字符在字符串中最后一次出现的位置
  console.log(str.lastIndexOf("l"));
  //字符串的截取
  console.log(str.substr(2, 2));
  //转换为小写
  console.log(str.toLowerCase());
  //转换为大写
  console.log(str.toUpperCase());
  //字符串的替换
  console.log(str.replace("h", "rr"));

13 正则表达式

就是用来进行字符串的匹配;

13.1 正则对象的创建

1)  var regexp=  new RegExp("表达式");
2)  var regexp =  /表达式/;

13.2 正则表达式的范围表示

[]: 表示范围
[a-z]:  a到z之间的所有字母
[3-9]:  3-9之间的所有数字

13.3 通配符的表示

\d: 匹配所有的数字
\D: 所有的非数字
\s: 所有的空白字符
\S: 所有的非空白字符
\w: 所有的字母 数字 下划线
\W:所有 (字母 数字 下划线的)
.: 代表任意字符

13.4 正则表达式的量词

{m}: 匹配具体的m个数
{m,n}: 匹配最少m个最多n个
{m,}: 至少匹配m个
*: ===>{0,}
+:===>{1,}
?:===>{0,1}

13.5 正则表达式开始和结尾

^: 表示字符串的开始
$: 表示字符串的结尾

13.6 子表达式

(): 子表达式

13.7 正则表达式的计算

| :或

13.8 正则表达式的转义符号

\

13.9 匹配qq邮箱或者163邮箱

手机号@qq/163.com
var str = "13991813302@qq.com";
var regexp = /^1[3-9]\d{9}@((qq)|(163))\.com$/

let ret = regexp.test(str);
console.log(ret);

14. js中的闭包(了解)

  • 外部函数内部定义了一个内部函数
  • 外部函数的返回值是内部函数对象
  • 内部函数中使用了外部函数的参数

符合以上三个条件函数就是闭包函数;

//外部函数
function outter(a, b) {
    //内部函数
    function inner() {
        console.log("a+b=" + (a + b));
    }
    //外部函数的返回值是"内部函数对象"
    return inner;
}

//调用外部函数,返回内部函数对象
var innerFunc = outter(10, 20)
//调用内部函数
innerFunc();

15. 柯里化(了解)

在以上的闭包函数中,调用起来很麻烦,我们可以这样来调用

outter(10,20)();

16. 函数对象作为函数的参数

//相当于我写好了一个接口
function calculate(a, b, optFuc) {
    return optFuc(a, b)
}

//相当于实现
var ret = calculate(10, 20, function (i, j) {
    return i + j;
})
console.log(ret);

17. EcmaScript6中新增的内容

17.1 变量及其常量的定义

let a = 10;//定义变量a
const b="hello";//定义常量

17.2 es6中新增了箭头函数

let func = (形参列表) => {函数体}
  • 定义箭头函数其 定义的返回值是一个函数对象func
  • 调用箭头函数,函数的返回值函数体中的最后一行语句的结果
  • 函数体中只有一行语句 {} 可以省略
  • 函数的形参只有一个参数,那么函数形参的 () 可以省略
箭头函数中的this指的不是其调用的对象,而是其定义的顶层对象;
普通的匿名函数中的this指的是定义的对象

17.3 es6中的模块化编程

在原生的js并没有模块化编程,但是随着前端的项目越来越复杂,而且团队之间需要很好的写作,原生的src引入其他脚本的方式显得不是很OK,那咋办?有一些大牛就提出来了一些模块化的规范,这些规范中被大家广泛接受的有两个, commonjs和es6两种模块化的规范;

大家现在还无法使用下面的这些语法,先把语法记下来

普通方式暴露接口:

export {变量名称}  //普通方式暴露变量可以暴露多个变量出去

默认暴露方式:

export default {变量名称}  //默认的暴露变量全局只能暴露一个出去

导入变量的方式:

import {变量名称,...} from "路径"   //导入普通方式暴露的变量

默认的导入变量的方式:

import 随便写一个名称  from "路径"  //导入default暴露的变量

17.4 扩展表达式

  • 扩展运算符可以进行字符串转数组,对象的复制,数组的合并
let array1 = [1,2,3,4,5];
let array2 = [6,7,8];

let array3 = array1.concat(array2); // es5中的,兼容性好
// 可以写成let array3 = [...array1...array2]; // 兼容性不强
console.log(array3);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值