0
点赞
收藏
分享

微信扫一扫

项目中应该使用nginx还是拦截器来封禁IP

目录

一、js代码位置

二、变量与数据类型

1、声明变量

2、基本类型(7种基本类型)

1、undefined和null

2、String ⭐

模板字符串(Template strings)

3、number和bigint ⭐

4、boolean ⭐

5、symbol

3、对象类型

1、Function ⭐⭐

1、默认参数

2、匿名函数

3、箭头函数

4、函数是对象

5、函数作用域

6、闭包

7、let、var与作用域

2、Array ⭐

1、push、shift、unshift、splice

2、join

3、map、filter、forEach

高阶函数:map,filter,forEach

回调函数: 例如作为参数传入的函数

4、split

5、升序,降序,洗牌

6、.find()

7、去重

8、数组和 (解构)

9、差集、交集、并集

3、Object ⭐⭐

属性

方法

get、set

1、语法

2、特殊:属性增删

3、用动object.defineProperty()对象态添加 get,set

4、特殊:this (this的三种情况,一种特例)

5、特殊:原型继承(对象之间)

6、特色:基于函数的原型继承

函数职责

4、JSON

1、 json对象 与 js对象 的区别在哪儿呢???

2、json 字符串与js对象的转换

3、JSON语法

5、动态类型

三、运算符与表达式 ⭐

1、 ===(严格相等)

2、||(逻辑或)

3、?? 与 ?.

4、...

5、[]{}

四、控制语句

1、for in

2、for of

3、try catch

五、Fetch API


一、js代码位置

  1. 放在script标签之间

  2. 引入js脚本

    • 注意,到了框架之后,引入方式会有不同

二、变量与数据类型

1、声明变量

  • let

    • let 声明的变量可以被多次赋值

  • const

    • const 修饰的叫常量,只能赋值一次

    • const 并不意味着它引用的内容不可修改,例如

  • var

    var声明的变量可以被多次赋值,例如

2、基本类型(7种基本类型)

1、undefined和null
  • 执行表达式或函数,没有返回结果,出现undefined

  • 访问数组不存在的元素,访问对象不存在的属性,出现undefined

  • 定义变量,没有初始化,出现undefined

    二者共同点

    • 都没有属性、方法

    • Nullish(undefined和null共同的称呼)

    二者区别

    • undefined 由 js 产生

    • null 有程序员提供

2、String ⭐

html 代码如下,用java和js种的字符串如何表示?

java

js

  • 模板字符串(Template strings)

    需求:拼接URI的请求参数,如

    传统方法拼接:可读性低

    模板字符串方式:可读性高

3、number和bigint ⭐
  • number 类型表示的是双精度浮动小数,例如

    既然是浮点小数,那么可以除零

    浮点小数都有运算精度问题,例如

  • 字符串转数字

  • 需要表示真正的整数,需要用 bigint,数字的结尾用 n 表示它是一个 bigint 类型

4、boolean ⭐
  • Truthy

  • Falsy

在js种,并不是 boolean 才能用于条件判断,你可以在if语句种使用【数字】、【字符串】...自拍为判断条件

这时就有一个规则,当需要条件判断时,这个值被当作 true 还是 false,当作 true 的值归类为 truthy,当作 false的值归类为 falsy

  • falsy

    • false

    • Nullish(null,undefined)

    • 0 或 0n 或 NaN(0和 非数字)

    • "" 或 '' 或 `` (长度为零的空字符串)

5、symbol

3、对象类型

1、Function ⭐⭐

定义

例子

调用函数

函数名(实参);

例子

1、默认参数

java中(spring)要实现默认参数的效果

js

2、匿名函数

语法

第一种场景:定义完毕后立刻调用

第二种场景:作为其它对象的方法,例如

页面有元素

此元素有一个onclick方法,会在鼠标单击这个元素后被执行,onclick方法刚开始是null,需要赋值后才能使用

3、箭头函数
(参数) => {
     // 函数体
     return 结果;
}
  • 如果没有参数,()还是要保留

  • 如果只有一个参数,()可以省略

  • 如果函数体内只有一行代码,{}可以省略

  • 如果函数体内的一行代码是返回代码,那么return也可以省略

例:

4、函数是对象

以下形式在 js 中非常常见!

  1. 可以参与赋值,例,具名函数也能参与赋值

  2. 有属性、有方法

    • 其中带有 f 标记的是方法,不带的是属性

    • 带有➡符号的可以继续展开,限于篇幅省略了

    • 带有 [[ ]] 的是内置属性,不能访问,只能查看

    • 相对重要的是 [[Prototype]] 和 [[Scopes]] 会在后面继承和作用域时讲到

  3. 可以作为方法参数

  4. 可以作为方法返回值

5、函数作用域

函数可以嵌套( js 代码中很常见,只是嵌套的形式更多是匿名函数,箭头函数)

看下面的例子

  • 以函数为分界线划定作用域,所有函数之外是全局作用域

  • 查找变量时,由内向外查找

    • 在内层作用域找到变量,就会停止查找,不会再找外层

    • 所用作用域都找不到变量,报错

  • 作用域本质上时函数对象的属性,可以通过 console.dir 来查看调式

6、闭包
  • 函数定义时,他的作用域已经确定好了,因此无论函数将来去了哪,都能从它的作用域中找到当时哪些变量

  • 别被概念忽悠了,闭包就是指函数能够访问自己的作用域中变量

7、let、var与作用域
  • 如果函数外层引用的是let变量,那么外层普通的{}也会作为作用域边界,最外层的let 也占一个 script 作用域

  • 如果函数外层引用的是 var 变量,外层普通的 {} 不会被视为边界

  • 如果 var 变量出现了重名,则他俩会被视为同一作用域中的同一个变量

  • 如果是let,则视为两个作用域中的两个变量

  • 要想里面的 e 和外面的 e 能区分开来,最简单的办法时改成let,或者用函数来界定作用域范围

2、Array ⭐

语法

API

1、push、shift、unshift、splice
2、join
3、map、filter、forEach

map 例子

  • 传给 map 的函数,参数代表旧元素,返回值代表新元素,map的内部实现(伪代码)

filter 例子

  • 传给 filter 的函数,参数代表旧元素,返回值 true 表示要留下的元素

forEach例子

  • 高阶函数:map,filter,forEach
  • 回调函数: 例如作为参数传入的函数
4、split

字符串转数组

5、升序,降序,洗牌

注意:num是一个非空数字数组

  • 升序:num.sort((a,b) => a-b)

  • 降序:num.sort((a,b) => b-a)

  • 洗牌:num.sort(() => Math.random() > .5 ? a : b)

6、.find()

根据元素查找元素

7、去重
8、数组和 (解构)
9、差集、交集、并集

3、Object ⭐⭐
  • 属性
  • 方法
  • get、set
1、语法

例1 写法1

例2 写法2

例3 (例1的简写方式 重点)⭐

  • 注意:对象方法这么写,仅限于对象内部

例4

调用 get,set

2、特殊:属性增删

对比以下 Java 中的 Object

  • Java 的 Object 是以类作为模板来创建,对象不能脱离类模板的范围,一个对象的属性,能用的方法都是确定好的

  • js 的对象,不需要什么模板,它的属性和方法可以随时加减

3、用动object.defineProperty()对象态添加 get,set
4、特殊:this (this的三种情况,一种特例)

先来对 Java 中的 this 有个理解

js 中的 this 也是隐式参数,但是它与函数运行时上下文相关

①、一个”落单“的函数

这是因为此时函数执行,全局对象 window 被当作了 this, window 对象的 name 属性是空串

②、同样的函数,如果作为对象的方法

这种情况下,会将当前对象作为 this

③、.call 还可以动态改变this

这回 study 执行时,就把 call 的第一个参数 stu 作为 this

例外:在箭头函数内出现的 this,以外层 this 理解

用匿名函数

  • this.name 所在的函数时【落单】的函数,因此 this 代表 window

    输出结果为

用箭头函数

  • this.name 所在的函数是箭头函数,因此 this 要看它外层的 play 函数, play 又是属于 stu 的方法,因此 this 代表 stu 对象

    输出结果为

不用箭头函数的做法

5、特殊:原型继承(对象之间)
  • father 是父对象,son 去调用 .m1 或 .f1 时,自身对象没有,就到父对象找

  • son 自己可以添加自己的属性和方法

  • son 里有特殊属性 __proto__ 代表它的父对象,js 术语:son 的原型对象

  • 不同浏览器对打印 son 的 __proto__ 属性时显示不同

    • Edge 打印 console.dir(son) 显示 [[prototype]]

    • Firefox 打印 console.dir(son) 显示 <protorype>

6、特色:基于函数的原型继承

出于方便的原因,js 又提供了一种基于函数的原型继承

配合 new 关键字,创建子对象

子对象的__proto__就是函数的 prototype 属性

4、JSON

之前我们将 http 请求格式时,讲过 json 这种数据格式,他的语法看起来与 js 对象非常相似,例如:

一个 json 对象可以张这样:

一个 js 对象长这样

1、 json对象 与 js对象 的区别在哪儿呢???
2、json 字符串与js对象的转换
3、JSON语法

5、动态类型

静态类型语言,如 Java,值有类型,变量也有类型、赋值给变量时,类型要相符

而 js 属于动态类型语言,值有类型,但变量没有类型,赋值给变量时,没要求

例如

动态类型看起来比较灵活,但变量没有类型,会给后期维护带来困难,例如

三、运算符与表达式 ⭐

1、 ===(严格相等)

严格相等运算符,用作逻辑判等。

补充:typeod 查看某个值的类型

2、||(逻辑或)

需求,如果参数 n 没有传递,给它一个 【男】

推荐做法

你可能的做法

还可能时这样

一些老旧代码中可能的做法(不推荐,有潜在问题

它的语法时

值1 || 值2

如果值1 时 Truthy,返回值1,如果值1 时 Falsy 返回值2

3、?? 与 ?.

?. 可选链操作符用于访问可能为空或未定义的属性或方法,它允许我们安全地访问嵌套对象的属性

?? 空值合并操作符用于检查一个变量是否为 null 或 undefined,如果是,则返回一个默认值,否则返回该变量的值。与传统的逻辑运算符 || 不同,?? 只会在左侧的值为 null 或 undefined 时返回右侧的默认值,对于其他假值(如空字符串、0、false 等)并不会返回默认值,而是会返回它本身。

需求,如果参数 n 没有传递值或是 null,给它一个【男】

如果用传统办法

用 ??

需求,函数参数是一个对象,可能包含有子属性

例如,参数可能是

现在要访问子属性

现在希望当某个属性是 nullish 时,短路并返回 undefined

用传统办法

4、...

展开运运算符

作用1:打散数组传递给多个参数

  • 传统的打散写法

  • 展开运算符写法

    • 打散可以理解为【去掉了】数组外侧的中括号,只剩下数组元素

作用2:复制数组或对象

数组

对象

注意:展开运算符复制属于浅拷贝(只能复制一层,多层的话就是引用了),例如

作用3:合并数组或对象

合并数组

合并对象

5、[]{}

解构赋值

[]

用在声明变量是

用在声明参数时

{}

用在声明变量时

用在声明参数时

四、控制语句

1、for in

主要用来遍历对象

  • 其中 const n 代表遍历出来的属性名

  • 注意1:方法名也能被遍历出来(它其实也算一种特殊属性)

  • 注意2:遍历子对象时,父对象的属性会跟着遍历出来

  • 注意3:在 for in 内获取属性值,要使用 [] 语法,而不能用 . 语法

2、for of

主要用来遍历数组,也可以时其它可迭代对象,如Map,Set等

3、try catch

五、Fetch API

Fetch API 可以用来获取远程数据,他有两种方式接受结果,同步方式与异步方式

格式

同步方式

  • await 关键字必须在一个标记了 async 的 function 内来使用

  • 后续代码不会在结果返回前执行

异步方式

fetch(url,options).then(结果 => {...})
// 后续代码
  • 后续代码不必等待结果返回就可以执行

举报

相关推荐

0 条评论