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

此博客参考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、堆(操作系统): 存储复杂类型(对象),一般由程序员分配释放,若程序员不释放,由垃圾回收机制回收。引用数据类型存放到堆里面

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

 图解

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ETHERNET/IP转TCP/IP网关tcp/ip协议包含哪几层

大家好&#xff0c;今天我们将带大家了解一款自主研发的通讯网关&#xff0c;远创智控YC-EIP-TCP/IP。这是一个强大的工具&#xff0c;能帮助我们将ETHERNET/IP网络和TCP/IP网络连接在一起&#xff0c;让我们更好地管理和监控网络。 1, 首先&#xff0c;让我们来看看这款网关…

Html基础知识学习——圣杯布局、margin负值、等高布局(十七)

文章目录 圣杯布局margin负值等高布局 圣杯布局 两边页面固定中间页面宽度随着浏览器大小自适应 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-widt…

Django中使用反向关系名称(related_name)解决由“多对多”关系引起的字段名字冲突问题引起的迁移命令报错。

当在模型中为关系字段添加了related_name参数后&#xff0c;您可以使用该参数指定的名称来引用反向关系。下面是一个简单的例子来说明如何引用反向关系。 假设您有以下两个模型&#xff1a; from django.db import modelsclass Author(models.Model):name models.CharField(…

十八、Unity游戏引擎入门

1、下载 首先需要下载Unity Hub,下载网址:https://unity.com/cn。 然后在其中下载Unity编辑器并安装,可选择最新版本。 接着需要选择适合的开发环境,例如Android Studio或Xcode,以便进行手机游戏开发。在安装完Unity后,需要根据项目需求下载对应的模块和插件…

php 开发微信 h5 支付 APIv3 接入超详细流程

✨ 目录 &#x1f388; 申请商户号&#x1f388; 申请商户证书&#x1f388; 设置V3密钥&#x1f388; 开通H5支付&#x1f388; 设置支付域名&#x1f388; SDK 下载&#x1f388; 第一次下载平台证书&#x1f388;非第一次下载平台证书&#x1f388; H5下单 &#x1f388; 申…

CentOS7中安装docker并配置阿里云加速器

文章目录 一、docker的安装二、docker的卸载三、配置加速器四、docker-compose安装五、docker-compose卸载六、docker-compose相关命令七、常用shell组合 一、docker的安装 参考&#xff1a;https://docs.docker.com/engine/install/centos 本文内容是基于&#xff1a;CentOS L…

管理软件开发平台:用科技提升数据治理能力,实现流程化办公!

如果实现流程化办公&#xff0c;想必是很多企业心心念念的发展愿望。但是&#xff0c;如何实现&#xff1f;利用什么样的平台可以完成这一目标&#xff1f;这是很多人值得深思的问题之一。管理软件开发平台实行100%全源码开放&#xff0c;是轻量级、可视化低代码开发平台&#…

Python Web框架 Flask 安装、使用

Python Web框架 Flask 安装 安装 Flask 框架 首先需要安装 Flask 框架, 可以通过以下命令安装: [rootlocalhost web]# pip3 install Flask Collecting FlaskDownloading Flask-2.0.3-py3-none-any.whl (95 kB)|██████████████████████████████…

【Visual Studio Code】---自定义键盘快捷键设置

概述 一个好的文章能够帮助开发者完成更便捷、更快速的开发。书山有路勤为径&#xff0c;学海无涯苦作舟。我是秋知叶i、期望每一个阅读了我的文章的开发者都能够有所成长。 一、进入键盘快捷键设置 1、进入键盘快捷键设置方法1 使用快捷键进入键盘快捷键设置先按 Ctrl K再…

基于springboot的企业员工工资管理系统(财务系统)

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问…

php实现站群软件权限管理功能示例

1.管理员页面RBAC.php <!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <title>权限管理</title> <script src"bootstrap/js/jquery-1.11.2.min.js"></script> </head>…

计算机网络 day11 tcpdump - 传输层 - netstat - socket - nc - TCP/UDP头部

目录 故障排查 tcpdump抓包工具 传输层&#xff08;TCP和UDP协议&#xff09; 传输层的作用 应用程序和端口号有什么关系&#xff1f; 传输层端对端连接实现拓扑图 如何查看自己的linux机器开放了哪些端口&#xff1f; 1、netstat(network status 网络的状态) netsta…

安卓APK反编译+修改+重打包+签名

目录 1.下载反编译工具包。2.将APK包&#xff0c;重命名为ZIP&#xff0c;解压。放到反编译根目录下。3.使用apktool反编译修改smail文件&#xff0c;进行重打包4.重新打包5.重签名 1.下载反编译工具包。 反编译工具包地址&#xff1a;百度网盘 提取码&#xff1a;dsu3 解压后…

传智教育成功入选教育部2023年产学合作协同育人项目

传智教育成功入选教育部2023年产学合作协同育人项目 近日&#xff0c;教育部产学合作协同育人项目专家组发布《关于公布教育部产学合作协同育人项目指南通过企业名单&#xff08;2023年5月&#xff09;的通知》&#xff0c;传智教育申报的“教学内容和课程体系改革项目 、师资…

标注工具Labelimg,正常运行显示,但是对图片点击Create RectBox画矩形框开始闪退

问题描述*&#xff1a;标注工具Labelimg&#xff0c;正常运行显示&#xff0c;但是对图片点击Create RectBox画矩形框开始闪退&#xff0c;闪退出现以下代码 File “C:\ProgramData\anaconda3\Lib\site-packages\libs\canvas.py”, line 530, in paintEvent p.drawLine(self.p…

一探究竟:人工智能、机器学习、深度学习

一、人工智能 1.1 人工智能是什么&#xff1f; 1956年在美国Dartmounth 大学举办的一场研讨会中提出了人工智能这一概念。人工智能&#xff08;Artificial Intelligence&#xff09;&#xff0c;简称AI&#xff0c;是计算机科学的一个分支&#xff0c;它企图了解智能的实质&am…

4. 设计(黑盒)测试用例 (一) 等价类 边界值 判定表

本篇文章我们将详细介绍如何来测试用例。 1. 设计测试用例的基本要素 1.1 测试用例概念 测试用例&#xff08;Test Case&#xff09;是为了实施测试而向被测试的系统提供的一组集合。 1.2 测试用例要素 测试环境、测试步骤、测试数据、预期结果。 1.3 测试用例的重要性 提…

异步fifo(1)

什么时异步fifo FIFO&#xff0c;即First In First Out &#xff0c;是一种先进先出的数据缓存器&#xff0c;异步FIFO 是指读写时钟不一致&#xff0c;读写时钟是互相独立的。数据从一个时钟域写入FIFO缓冲区&#xff0c;并从另一个时钟域的同一FIFO缓冲区中读取数据&#xf…

libevent:windows环境配置+QT使用

目录 libevent是什么 编译 QT使用 测试代码 libevent是什么 Fast portable non-blocking network programming with Libevent http://www.wangafu.net/~nickm/libevent-book/TOC.html 这篇文档讲的很清楚&#xff0c;尤其是Chapter 1: A tiny introduction to asynchro…