目录

  1. 1. 前言
  2. 2. helloworld
  3. 3. html中插入JavaScript
  4. 4. 语法
    1. 4.1. 字面量
    2. 4.2. 操作符
    3. 4.3. 关键字
    4. 4.4. 注释
  5. 5. 语句
    1. 5.1. 语句标识符
    2. 5.2. 折行
  6. 6. 变量
    1. 6.1. 作用域
  7. 7. 函数
    1. 7.1. 函数定义
      1. 7.1.1. Function() 构造函数
      2. 7.1.2. 函数提升
      3. 7.1.3. 自调用函数
      4. 7.1.4. 函数可作为一个值使用
      5. 7.1.5. 函数是对象
      6. 7.1.6. 箭头函数
  8. 8. Fetch API

LOADING

第一次加载文章图片可能会花费较长时间

要不挂个梯子试试?(x

加载过慢请开启缓存 浏览器默认开启

JavaScript

2023/12/5 Basic
  |     |   总文章阅读量:

前言

一直都想玩玩前端开发,那么就比较系统的学一下JavaScript吧

从菜鸟教程入门到入土:https://www.runoob.com/js/js-tutorial.html

跟着pop学JavaScript:https://www.yuque.com/boogipop/ot88z5/qugf5a7u2qh8tclx#i22F2

MDN官方文档:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript

helloworld

那么,hello world

<script>
alert("hello world");
</script>

html中插入JavaScript

<script>标签

脚本可位于 HTML 的 <body><head> 部分中,或者同时存在于两个部分中。

通常是把函数放入<head>部分中,或者放在页面底部。这样就可以把它们安置到同一处位置,不会干扰页面的内容

<!DOCTYPE html>
<html>

<head>
    <script>
        function myFunction1() {
            document.getElementById("demo").innerHTML = "XSS head?";
        }
    </script>
</head>

<body>
    <h1>年轻人的第一个前端页面</h1>
    <p id="demo">qaq</p>
    <button type="button" onclick="myFunction1()">戳我</button>
    <script>
        function myFunction2() {
            document.getElementById("demo").innerHTML = "XSS body?";
        }
    </script>
    <button type="button" onclick="myFunction2()">戳我</button>
</body>

</html>

image-20231205130915253


语法

字面量

在编程语言中,一般固定值称为字面量,如 3.14

  • 数字字面量:可以是整数或者是小数,或者是科学计数法e

    3.14
    1001
    123e5
  • 字符串字面量:可以使用单引号或双引号

    "John Doe"
    'John Doe'
  • 表达式字面量:用于计算

    5 + 6
    5 * 10
  • 数组字面量:定义一个数组

    [40, 100, 1, 5, 25, 10]
  • 对象字面量:定义一个对象

    {firstName:"John", lastName:"Doe", age:50, eyeColor:"blue"}
  • 函数字面量:定义一个函数

    function myFunction(a, b) { return a * b;}

操作符

类型 实例 描述
赋值,算术和位运算符 = + - * / 在 JS 运算符中描述
条件,比较及逻辑运算符 == != < > 在 JS 比较运算符中描述

关键字

保留关键字

abstract else instanceof super
boolean enum int switch
break export interface synchronized
byte extends let this
case false long throw
catch final native throws
char finally new transient
class float null true
const for package try
continue function private typeof
debugger goto protected var
default if public void
delete implements return volatile
do import short while
double in static with

注释

// 单行注释
/*
多行注释
*/

语句

JavaScript 语句是发给浏览器的命令

;分割语句

JavaScript 会忽略语句中多余的空格

语句标识符

即关键字

语句 描述
break 用于跳出循环。
catch 语句块,在 try 语句块执行出错时执行 catch 语句块。
continue 跳过循环中的一个迭代。
do … while 执行一个语句块,在条件语句为 true 时继续执行该语句块。
for 在条件语句为 true 时,可以将代码块执行指定的次数。
for … in 用于遍历数组或者对象的属性(对数组或者对象的属性进行循环操作)。
function 定义一个函数
if … else 用于基于不同的条件来执行不同的动作。
return 退出函数
switch 用于基于不同的条件来执行不同的动作。
throw 抛出(生成)错误 。
try 实现错误处理,与 catch 一同使用。
var 声明一个变量。
while 当条件语句为 true 时,执行语句块。

折行

可以使用反斜杠对代码行进行换行

document.write("你好 \
世界!");

变量

使用关键字var来定义变量, 使用等号=来为变量赋值

var x, length
x = 5
length = 6
  • 变量必须以字母开头
  • 变量也能以$_符号开头(不过我们不推荐这么做)
  • 变量名称对大小写敏感(y 和 Y 是不同的变量)

作用域

内外函数中有相同名字的变量,互不干扰

var x='xxx';
alert(x);
alert(windows.x);
windows.alert(windows.x);

上下3个都是一个意思,默认所有的全局变量和方法,都会在windows对象里


函数

两种写法:

<script>
  function abs(x){
    if(x>=0){
      return x;
    }
    else{
      return -x;
    }
  }
</script>
//方法二
  var abs=function (x){
    if(x>=0){
      return x;
    }
    else{
      return -x;
    }
  }

但是假如像上面那样去定义的话,就会存在几个问题,假如我传入多个参数呢?假如传入字符串呢?

image-20240502133644637

很明显JavaScript很难报错,这就是一个问题,所以我们需要自行做一些处理

<script>
  function abs(x){
    if(typeof x!=='number'){
      throw 'not a num!';
    }
    if(x>=0){
      return x;
    }
    else{
      return -x;
    }
  }
</script>

image-20240502134017279

而对于多个参数, JavaScript给了一个arguments参数,可以包含所有的参数

<script>
  function abs(x){
    if(typeof x!=='number'){
      throw 'not a num!';
    }
    console.log("x=>"+x);
    for(var i=0;i<arguments.length;i++){
      console.log(arguments[i]);
    }
    if(x>=0){
      return x;
    }
    else{
      return -x;
    }
  }
</script>

image-20240502134402547

如果想要接受后面多余的参数就得用到rest

<script>
  function abs(x,...rest){
    if(typeof x!=='number'){
      throw 'not a num!';
    }
   console.log(rest)
    if(x>=0){
      return x;
    }
    else{
      return -x;
    }
  }
</script>

image-20240502134600526

还有就是一个函数内可以有内部函数,可以套娃

函数定义

这是函数声明

function myFunction(a, b) {
	return a * b;
}

函数声明后不会立即执行,会在我们需要的时候调用到

这是函数表达式定义

var x = function (a, b) {return a * b}; 

在函数表达式存储在变量后,变量也可作为一个函数使用:

var x = function (a, b) {return a * b};
var z = x(4, 3);

这个函数实际上是一个 匿名函数,函数存储在变量中,不需要函数名称,通常通过变量名来调用

Function() 构造函数

函数同样可以通过内置的 JavaScript 函数构造器Function()定义

var myFunction = new Function("a", "b", "return a * b");
// 等价于 var myFunction = function (a, b) {return a * b};
var x = myFunction(4, 3);

函数提升

提升(Hoisting)是 JavaScript 默认将当前作用域提升到前面去的行为

提升(Hoisting)应用在变量的声明与函数的声明

myFunction(5);

function myFunction(y) {
    return y * y;
}

使用表达式定义函数时无法提升

自调用函数

函数表达式可以 “自调用”,如果表达式后面紧跟 () ,则会自动调用

不能自调用声明的函数

(function () {
    var x = "Hello!!";      // 我将调用自己
})(); 

以上函数实际上是一个 匿名自我调用的函数

函数可作为一个值使用

function myFunction(a, b) {
    return a * b;
}
// 作为一个值使用
var x = myFunction(4, 3);
// 作为表达式使用
var y = myFunction(4, 3) * 2;

函数是对象

在 JavaScript 中使用 typeof 操作符判断函数类型将返回 “function” ,但是将 JavaScript 函数描述为一个对象更加准确

JavaScript 函数有 属性方法

arguments.length 属性返回函数调用过程接收到的参数个数:

function myFunction(a, b) {
    return arguments.length;
}

toString() 方法将函数作为一个字符串返回:

function myFunction(a, b) {
    return a * b;
}

var txt = myFunction.toString();

箭头函数

ES6 新增了箭头函数

(参数1, 参数2,, 参数N) => { 函数声明 }

(参数1, 参数2,, 参数N) => 表达式(单一)
// 相当于:(参数1, 参数2, …, 参数N) =>{ return 表达式; }

(单一参数) => {函数声明}
单一参数 => {函数声明}

() => {函数声明}

demo:

// ES5
var x = function(x, y) {
     return x * y;
}
 
// ES6
const x = (x, y) => x * y;

即箭头后面要跟着return的值


Fetch API

https://developer.mozilla.org/zh-CN/docs/Web/API/Fetch_API/

Fetch API 提供了一个获取资源的接口(包括跨网络通信)

fetch("http://example.com/movies.json")
  .then((response) => response.json())
  .then((data) => console.log(data));

通过网络获取一个 JSON 文件并将其打印到控制台