前端学习笔记:JavaScript基础语法(ECMAScript)

news2025/2/2 15:57:06

此博客参考b站:【黑马程序员前端JavaScript入门到精通全套视频教程,javascript核心进阶ES6语法、API、js高级等基础知识和实战教程】https://www.bilibili.com/video/BV1Y84y1L7Nn?p=76&vd_source=06e5549bf018e111f4275c259292d0da

这份笔记适用于已经学过一门编程语言(最好是C语言)的同学,如果你没有编程基础,那么这套笔记可能不适合你哦~

目录

一、开发者网络平台MDN

二、JavaScript的组成

1、ECMAScript

2、Web APIs 

三、引入方式

1、内部JavaScript

2、外部JavaScript

外部JavaScript注意事项

3、内联JavaScript

四、结束符

五、输入、输出语法

1、输出语法

2、输入语法

六、字面量的概念

七、变量的基本使用

1、变量的声明

2、数组变量的声明

3、常量的声明

八、数据类型——基本数据类型

1、数字类型 (Number)

2、字符串类型 (string)

注意事项

字符串拼接

模板字符串

字符串的比较

3、布尔类型 (boolean)

4、未定义类型 (undefined)

5、null (空类型)

九、检测数据类型

十、类型转换

1、 隐式转换

2、显示转换

1、Number(数据)

2、parselnt(数据)

3、parseFloat(数据)

4、String(数据)

5、Boolean(数据)

十一、=、==、===、!=、!==

十二、ASCII码表

十三、运算符优先级

十四、分支语句、循环语句

数字补0案例

数字补0案例相关例题:转换时间案例

十五、操作数组

1、增

2、删

3、排序

十六、函数

1、函数声明语法

2、函数命名规范

3、函数调用语法

4、函数参数

5、函数返回值

6、函数细节补充 

十七、匿名函数

1、函数表达式

2、立即执行函数

3、具名函数和匿名函数的不同点

十八、逻辑中断

十九、数据类型——引用数据类型(对象)

1、对象声明语法

2、对象使用

3、对象中的属性

4、对象中有关属性的操作(增、删、查、改)

补充:查的两种方式

5、对象中的方法

6、遍历对象

7、遍历数组对象

8、内置对象

内置对象-Math

生成任意范围的随机数

二十、拓展——基本数据类型和引用数据类型的区别

堆栈空间分配区别:


一、开发者网络平台MDN

先介绍一个前端的权威网站:MDN Web Docs (mozilla.org)

MDN是Mozilla基金会的开发者网络平台
。提供了大量关于各种HTML
、CSS
和JavaScript功能的开放、详细的文档,以及广泛的Web API参考资料

二、JavaScript的组成

1、ECMAScript

规定了js基础语法核心知识。
比如:变量、分支语句、循环语句、对象等等

2、Web APIs 

DOM  操作文档,比如对页面元素进行移动、大小、添加删除等操作
BOM  操作浏览器,比如页面弹窗,检测窗口宽度、存储数据到浏览器等等

三、引入方式

JS的引入方式与CSS基本相同

1、内部JavaScript

直接写在html文件里,用script标签包住

规范: script标签写在</body>上面

2、外部JavaScript

代码写在以.js结尾的文件里

语法: 通过script标签,引入到html页面中

外部JavaScript注意事项

1.我们将 <script> 放在HTML文件的底部附近的原因是浏览器会按照代码在文件中的顺序加载 HTML。如果先加载的JavaScript 期望修改其下方的 HTML,那么它可能由于 HTML 尚未被加载而失效。因此,将JavaScript 代码放在 HTML页面的底部附近通常是最好的策略

2.script标签中间无需写代码,否则会被忽略!

3.外部/avaScript会使代码更加有序,更易于复用,且没有了脚本的混合,HTML 也会更加易读,因此这是个好的习惯

3、内联JavaScript

代码写在标签内部

注意: 此处作为了解即可,但是后面vue框架会用这种模式

四、结束符

JS语句结束符是分号,但是可写可不写

约定:为了风格统一,结束符要么每句都写,要么每句都不写 (按照团队要求)

五、输入、输出语法

1、输出语法

2、输入语法

注:prompt以及表单取过来的值默认是字符串类型

六、字面量的概念

在计算机科学中,字面量 (literal) 是在计算机中描述的事/物

比如:

我们工资是: 1000    此时 1000 就是数字字面量

‘黑马程序员’字符串字面量

还有接下来我们学的    [ ] 数组字面量    { } 对象字面量等等

七、变量的基本使用

JS是一门若数据类型的编程语言。

C语言中,声明变量时用int、double、char等严格区分数据类型,而JS声明不同数据类型的数据均用let 变量名

1、变量的声明

变量命名规则和C语言相同

2、数组变量的声明

第二种是使用函数声明,但习惯上用第一种

3、常量的声明

八、数据类型——基本数据类型

1、数字类型 (Number)

NaN 代表一个计算错误。它是一个不正确的或者一个未定义的数学操作所得到的结果

通俗地讲,NaN的意思是:这不是一个数字

NaN不等于任何值,包括它本身

例如:'老师'- 2  结果是NaN

NaN 是粘性的。任何对 NaN 的操作都会返回 NaN

例如:NaN + 2  结果是NaN

2、字符串类型 (string)

通过单引号 (") 、双引号("")或反引号(``)包裹的数据都叫字符串,单引号和双引号没有本质上的区别,推荐使用单引号

反引号可以格式预留

注意事项

单引号/双引号可以互相嵌套,但是不以自已嵌套自已(口诀: 外双内单,或者外单内双)

必要时可以使用转义符 \ ,输出单引号或双引号

字符串拼接

字符串拼接:

+ 运算符可以实现字符串的拼接

模板字符串

使用场景

拼接字符串和变量

内容拼接变量时,用${ }包住变量

字符串的比较

字符串比较,是比较的字符对应的ASCII码

从左往右依次比较

如果第一位一样再比较第二位,以此类推

3、布尔类型 (boolean)

表示肯定或否定时在计算机中对应的是布尔类型数据

它有两个固定的值 true 和 false,表示肯定的数据用 true (真),表示否定的数据用 false (假)

4、未定义类型 (undefined)

未定义是比较特殊的类型,只有一个值 undefined

只声明变量,不赋值的情况下,变量的默认值为 undefined

5、null (空类型)

JavaScript中的 null仅仅是一个代表“无”、“空”或“值未知”的特殊值

null是一个对象数据类型

null和 undefined 区别:

undefined 表示没有赋值
null 表示赋值了,但是内容为空

null开发中的使用场景:

官方解释: 把null作为尚未创建的对象

大白话: 将来有个变量里面存放的是一个对象,但是对象还没创建好,可以先给个null

九、检测数据类型

通过 typeof 关键字检测数据类型

typeof 运算符可以返回被检测的数据类型。它支持两种语法形式:

1.作为运算符: typeof x (常用的写法)
2. 函数形式: typeof(x)

换言之,有括号和没有括号,得到的结果是一样的,所以我们直接使用第一种写法

十、类型转换

prompt以及表单取过来的值默认是字符串类型,故有时需要进行数据的类型转换

1、 隐式转换

某些运算符被执行时,系统内部自动将数据类型进行转换,这种转换称为隐式转换

规则:

+号两边只要有一个是字符串,都会把另外一个转成字符串

除了+以外的算术运算符 比如 -  * / 等都会把数据转成数字类型

+号作为正号解析可以转换成数字型,例如+prompt()

任何数据和字符串相加结果都是字符串

2、显示转换

1、Number(数据)

转成数字类型
如果字符串内容里有非数字,转换失败时结果为 NaN (Not a Number) 即不是一个数字NaN也是number类型的数据,代表非数字

把'12px'转化成数字型,px会被自动忽略,但如果是abc12这种字母开头的,就不能正常转化为数字

2、parselnt(数据)

只保留整数

3、parseFloat(数据)

可以保留小数

4、String(数据)

转换成字符串

另一种写法:变量.toString()
括号里面可以跟进制

5、Boolean(数据)

记忆:  ""、0、undefined、null、false、NaN 转换为布尔值后都是false,余则为 true

十一、=、==、===、!=、!==

= 单等是赋值

== 可判断不全相等或完全相等(左右两边值是否相等)

===可判断全等(左右两边是否类型和值都相等)

开发中判断是否相等,强烈推荐使用===

!=的范围比!==的范围更窄,===比==的范围更窄

!=和===是一对,!==和==是一对

例如

'2'==2 //真
2==2 //真

'2'===2 //假
2===2 //真

'2'!=2 //真
'2'!==2 //假

十二、ASCII码表

把表放在这没别的,就是以后要用的时候方便找 

十三、运算符优先级

和C语言一样一样的

十四、分支语句、循环语句

JS的分支、循环语句和C语言一样一样的,这里就不详细介绍了。只介绍一下三元运算符数字补0案例

数字补0案例

需求: 用户输入1个数,如果数字小于10,则前面进行补0,例如需显示02、09等数字,为后续实现倒计时做铺垫

代码:

let num = +prompt(请您输入一个数字:')

num = num < 10 ? '0' + num : num

数字补0案例相关例题:转换时间案例

需求,用户输入秒数seconds,浏览器自动进行时间转换并显示:seconds秒转化为xx时xx分xx秒

代码:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>转换时间</title>
</head>

<body>
    <script>
        let seconds = +prompt('请输入秒数:')
        let minutes = parseInt(seconds / 60)
        let hour = parseInt(minutes / 60)
        seconds = seconds % 60
        minutes = minutes % 60
        document.write(`${seconds}转换为${hour > 10 ? hour : '0' + hour}时${minutes > 10 ? minutes : '0' + minutes}分${seconds > 10 ? seconds : '0' + seconds}秒`)
    </script>
</body>

</html>

十五、操作数组

1、增

数组名.push() 方法将一个或多个元素添加到数组的末尾,并返回该数组的新长度

 数组名.unshift() 方法将一个或多个元素添加到数组的开头,并返回该数组的新长度

 

2、删

数组.pop()方法从数组中删除最后一个元素,并返回该元素的值

数组.shift()方法从数组中删除第一个元素,并返回该元素的值

 

数组.splice() 方法 删除指定元素

语法:arr.splice(起始位置,删除几个元素) 

 

3、排序

数组.sort() 方法可以排序

 

十六、函数

1、函数声明语法

 

 

2、函数命名规范

命名规则和变量命名规则一致

尽量使用小驼峰命名法命名,且前缀尽量用动词,如get、set等

 

3、函数调用语法

 

4、函数参数

函数可以有一个或多个参数,也可以没有参数

下面的例子有实参时,执行时x=0,y=0,无实参时,按传入的实参执行

 

5、函数返回值

可以返回一个值或多个值,返回多个值时用数组返回

return [num1,num2,num3] //返回多个值

6、函数细节补充 

1、若存在两个函数名相同的函数,则后面的会覆盖前面的函数

2、在Javascript中实参的个数和形参的个数可以不一致
如果形参过少会自动填上undefined(了解即可)
如果实参过多那么多余的实参会被忽略(函数内部有一个arguments,里面装着所有的实参)

3、变量有一个坑:如果函数内部,变量没有声明,直接赋值,也当全局变量看。但是强烈不推荐这样写

十七、匿名函数

匿名函数:

没有名字的函数,无法直接使用

使用方式:

1、函数表达式

2、立即执行函数

1、函数表达式

将匿名函数赋值给一个变量,并且通过变量名称进行调用,我们将这个称为函数表达式

语法:

调用函数的方法和具名函数一样

 

2、立即执行函数

场景介绍:避免全局变量之间的污染

语法:

(function(){}()) //写法一
(function(){})() //写法二

 注意:多个立即执行函数要用;隔开,要不然会报错

3、具名函数和匿名函数的不同点

具名函数的调用可以写在任意位置(可以在函数声明前调用,也可以在函数声明后调用)

匿名函数必须先声明再调用

十八、逻辑中断

短路:只存在于 &&和中,当满足一定条件会让右边代码不执行

原因:通过左边能得到整个式子的结果,因此没必要再判断右边运算

结果:无论 && 还是儿,运算结果都是最后被执行的表达式值,一般用在变量赋值

 

十九、数据类型——引用数据类型(对象)

这里的对象类似于C语言中的结构体,但与结构体不同的是,对象不仅包含属性(也就是变量),还包含方法(也就是操作该对象的函数)。所以,用C++中的“类”的概念来类比会更加合适

1、对象声明语法

2、对象使用

对象外面叫变量,对象里面叫属性;对象外面叫函数,对象里面叫方法

 

 

3、对象中的属性

1、数据描述性的信息称为属性,如人的姓名、身高、年龄、性别等,一般是名词性的

2、属性都是成 对出现的,包括属性名和值,它们之间使用英文冒号分隔
多个属性之间使用英文逗号分隔(不要忘了逗号!!!)

3、属性就是依附在对象上的变量

4、属性名可以使用' '或" ",一般情况下省略,除非名称遇到特殊符号如空格、中横线等

4、对象中有关属性的操作(增、删、查、改)

一张图就搞定了 

补充:查的两种方式

 

5、对象中的方法

数据行为性的信息称为方法,如跑步、唱歌等,一般是动词性的,其本质是函数

1.方法是由方法名和函数两部分构成,它们之间使用英文冒号分隔

2.多个属性之间使用英文逗号分隔

3.方法是依附在对象中的函数

4.方法名可以使用' '或" ",一般情况下省略,除非名称遇到特殊符号如空格、中横线等

调用:

对象名.方法名(参数)

6、遍历对象

一般不用这种方式遍历数组,主要是用来遍历对象

for in语法中的 k 是一个变量,在循环的过程中依次代表对象的属性名

由于k 是变量,所以必须使用[ ]语法解析

一定记住: k 是获得对象的属性名, 对象名[k] 是获得 属性值

7、遍历数组对象

例题:

 代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>遍历数组对象</title>
    <style>
        th,
        td{
            border:1px solid #9b9b9b;
        }

        table tr:nth-child(1){
            background-color: #ccc;
        }

        table tr:not(:first-child):hover{ /*:not(:first-child)的意思是除了第一个*/
            background-color: #ccc;
        }

        table{
            margin: 50px auto;
            height: 200px;
            width: 500px;
            text-align: center;
            border-collapse: collapse;
        }
    </style>
</head>
<body>
    
    <script>
        let students = [
        {name:'小明',age:18,gender:'男',hometown:'广东省'},
        {name:'小红',age:19,gender:'女',hometown:'河南省'},
        {name:'小刚',age:17,gender:'男',hometown:'江西省'},
        {name:'小丽',age:18,gender:'女',hometown:'浙江省'}
        ]

        document.write(`<table>`)
            document.write(`
            <tr>
                <th>序号</th>
                <th>姓名</th>
                <th>年龄</th>
                <th>性别</th>
                <th>家乡</th>
            </tr>
        `)
        for(let i=0;i<students.length;i++)
        {
           document.write(`
            <tr>
                <td>${i+1}</td>
                <td>${students[i].name}</td>
                <td>${students[i].age}</td>
                <td>${students[i].gender}</td>
                <td>${students[i].hometown}</td>
            </tr>
           `)
        }
        document.write(`</table>`)
    </script>
</body>
</html>

浏览器预览效果

 

8、内置对象

内置对象类似于C语言中已经封装好的函数。例如C语言中的求平方根的函数、求幂的函数,我们使用时只需在代码开头引入头文件,就能正常地调用这些函数了。

内置对象-Math

介绍:Math对象是JavaScript提供的一个“数学”对象

作用:提供了一系列做数学运算的方法Math对象

包含的方法有:
random: 生成0-1之间的随机数 (包含0不包括1)
ceil: 向上取整
floor:向下取整
max:找最大数
min:找最小数
pow:幂运算
abs:绝对值

使用:

Math.方法名(参数)
 

生成任意范围的随机数

 

二十、拓展——基本数据类型和引用数据类型的区别

简单类型又叫做基本数据类型或者值类型,复杂类型又叫做引用类型

值类型:简单数据类型/基本数据类型,在存储时变量中存储的是值本身,因此叫做值类型,例如:string ,number,boolean,undefined,null

引用类型:复杂数据类型,在存储时变量中存储的仅仅是地址(引用),因此叫做引用数据类型通过 new 关键字创建的对象(系统对象、自定义对象),如 object、Array、Date等

堆栈空间分配区别:

1、栈(操作系统):由操作系统自动分配释放存放函数的参数值、局部变量的值等。其操作方式类似于数据结构中的栈,简单数据类型存放到栈里面

2、堆(操作系统): 存储复杂类型(对象),一般由程序员分配释放,若程序员不释放,由垃圾回收机制回收。引用数据类型存放到堆里面

咱们看一个例子(注意图中控制台显示的值)

 图解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/762456.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TS高级开发技巧15条

TS高级开发技巧15条 1.可选链 Optional Chaining (?.): 在不用担心遇到 null 或 undefined 值的前提下&#xff0c;可选链允许你安全访问 nested 对象属性和方法。 他会简单计算类型为 null 或者 undefined 的中间属性。 const user {name: John,address: {city: New York,p…

【C++】STL | 模拟实现简易string

目录 1. 框架搭建 2. 迭代器的实现 3. string的拷贝构造和赋值&#xff08;深拷贝&#xff09; 拷贝构造 赋值构造 4. string的增删查改 reserve 接口 resize 接口 push_back 接口 append 接口 operator() 实现 insert 接口 erase 接口 find 接口 substr 接口 cle…

若依前端使用图标

图标 前后端分离的若依前端使用的图标分为两种&#xff1a;分别是svg图标和element的图标 svg图标 1&#xff0c;使用方法 <!-- icon-class 为 icon 的名字; class-name 为 icon 自定义 class--> <svg-icon icon-class"password" class-namecustom-cla…

C++ for Reverse Words in a String

这道题是Leetcode上的151.反转字符串中的单词这道题&#xff0c;这道题给出的题目要求是&#xff1a; 给你一个字符串 s &#xff0c;请你反转字符串中 单词 的顺序。 单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。 返回 单词 顺序颠倒…

Pycharm--Low Memory

Low Memory The IDE is running low on memory and this might affect performance. Please consider increasing available heap. 卡成翔 -- 已经配置成4096了啊

【UE4 塔防游戏系列】07-子弹对敌人造成伤害

目录 效果 步骤 一、让子弹拥有不同伤害 二、敌人拥有不同血量 三、修改“BP_TowerBase”逻辑 四、发射的子弹对敌人造成伤害 效果 步骤 一、让子弹拥有不同伤害 为了让每一种子弹拥有不同的伤害值&#xff0c;打开“TotalBulletsCategory”&#xff08;所有子弹的父类…

java线上故障排查套路总结

线上故障主要会包括cpu、磁盘、内存以及网络问题&#xff0c;而大多数故障可能会包含不止一个层面的问题&#xff0c;所以进行排查时候尽量四个方面依次排查一遍。同时例如jstack、jmap等工具也是不囿于一个方面的问题的&#xff0c;基本上出问题就是df、free、top 三连&#x…

(五)Flask之深入剖析路由源码

路由&#xff08;Route&#xff09;这个概念在所有web框架中都非常重要&#xff0c;它是用于定义URL和对应的处理函数&#xff08;视图&#xff09;之间的映射关系。通过定义路由&#xff0c;可以使web框架应用程序能够响应不同的URL请求&#xff0c;并执行相应的逻辑。 源码剖…

老码农的管理拙见

【引子】 尽管自己从业了20多年&#xff0c;也曾管理过从几个人到几百人的团队&#xff0c;但个人非常不愿意或者不敢讨论团队管理的问题&#xff0c;因为管理是以结果为导向的&#xff0c; 具有后验的特征&#xff0c;而且管理中面对的最大复杂性是人&#xff0c;每个人都是不…

安装pycocotools报错“fatal error: Python.h: No such file or directory“ | 已解决

记录一段报错&#xff1a; pycocotools/_mask.c:6:10: fatal error: Python.h: No such file or directory#include "Python.h"^~~~~~~~~~compilation terminated./tmp/pip-build-env-crtws8v6/overlay/lib/python3.8/site-packages/Cython/Compiler/Main.py:369: F…

mssql 以xml类型为存储过程传递不确定数量的参数

mssql 以xml类型传递不确定数量的参数 存储过程xml 处理在存储过程中参数在存储过程中使用 xml 作为参数存储过程 相信各位小伙伴在使用数据库的过程中,或多或少的建立了一些存储过程,并且带有一些参数,用来增加存储过程的适用性。 类似老顾的截图这样的,通常,我们需要将…

华为云CodeArts Check IDE插件体验之旅

1 开发者的思考 近年来&#xff0c;ChatGPT的来临像一场突然出现的风暴&#xff0c;程序员是否马上被取代的担忧出现在媒体上了&#xff0c;作为软件开发小白&#xff0c;前不久我也陷入了这样的深思之中&#xff0c;但认真的想了下&#xff0c;ChatGPT就如自动驾驶一样&#…

MySQL的安装与配置

今天要和大家唠唠关于数据库的那些事儿&#xff01;按照加哥一贯的调性&#xff0c;咱还是从花边八卦聊起。先来简 单地梳理一下数据库、MySQL发展的时间线&#xff1a; 1970年&#xff0c;在IBM公司工作的数学家 E.F.Codd 发表了数学论文《大型共享数据库的关系数据模型》 &am…

每日站会如此简单,为什么总是开不好?

美式足球或橄榄球等运动的球队&#xff0c;会在每场比赛上场前聚在一起开个短会。这种临场短会能让整个球队的成员在比赛过程中互通信息、相互协作。 每日站会是敏捷开发的重要流程之一。对于团队而言&#xff0c;每日站会与这种赛前短会类似&#xff0c;让每个成员都了解到团…

2023年上海/成都/深圳CSPM-3中级国标项目管理认证招生

CSPM-3中级项目管理专业人员认证&#xff0c;是中国标准化协会&#xff08;全国项目管理标准化技术委员会秘书处&#xff09;&#xff0c;面向社会开展项目管理专业人员能力的等级证书。旨在构建多层次从业人员培养培训体系&#xff0c;建立健全人才职业能力评价和激励机制的要…

Matplotlib坐标轴范围

Matplotlib 可以根据自变量与因变量的取值范围&#xff0c;自动设置 x 轴与 y 轴的数值大小。当然&#xff0c;您也可以用自定义的方式&#xff0c;通过 set_xlim() 和 set_ylim() 对 x、y 轴的数值范围进行设置。 当对 3D 图像进行设置的时&#xff0c;会增加一个 z 轴&#x…

日志收集工具

日志管理的第一步是收集日志数据。日志收集可能是一项具有挑战性的任务&#xff0c;因为某些系统&#xff08;如防火墙、入侵检测系统和入侵防御系统&#xff09;具有生成大量日志数据的 EPS&#xff08;每秒事件数&#xff09;。为了实时收集和处理日志数据&#xff0c;无论日…

【历史上的今天】6 月 7 日:图灵逝世;Kubernetes 开源版本发布;分组交换网络发明者出生

整理 | 王启隆 透过「历史上的今天」&#xff0c;从过去看未来&#xff0c;从现在亦可以改变未来。 今天是 2023 年 6 月 7 日&#xff0c;在 1742 年的今天&#xff0c;普鲁士数学家克里斯蒂安哥德巴赫在写给瑞士数学家莱昂哈德欧拉的通信中&#xff0c;提出了以下的猜想&…

手机APP三维建模不清晰?单反相机接入移动端来袭!

为什么我们需要单反相机接入 当前&#xff0c;手机本身的像素还满足不了考古级的精度要求&#xff0c;考古现场都是用专业相机对文物进行拍照&#xff0c;再把照片导入到电脑进行建模。“考古工作比较细致&#xff0c;有时候一来一回挺费事的。”云端地球的忠实用户&#xff0…

Linux5.16 Ceph集群

文章目录 计算机系统5G云计算第四章 LINUX Ceph集群一、Ceph1.存储基础1&#xff09;单机存储设备2&#xff09;单机存储的问题3&#xff09;商业存储解决方案4&#xff09;分布式存储&#xff08;软件定义的存储 SDS&#xff09;5&#xff09;分布式存储的类型 2.Ceph 简介3.C…