JavaScript(基础语法篇)

news2025/4/6 5:43:05

目录

初识 JavaScript

JavaScript 是什么

发展历史

JavaScript 和 HTML 和 CSS 之间的关系

JavaScript 运行过程

JavaScript 的组成

前置知识

JavaScript 的书写形式

1. 行内式

2. 内嵌式

3. 外部式

注释

输入输出

输入: prompt

输出: alert

选择框:confirm

输出: console.log

语法概览

变量的使用

基本用法

理解 动态类型

基本数据类型

number 数字类型

数字进制表示

特殊的数字值

string 字符串类型

基本规则

转义字符

求长度

字符串拼接

boolean 布尔类型

undefined 未定义数据类型

null 空值类型

运算符

算术运算符

赋值运算符 & 复合赋值运算符

自增自减运算符

比较运算符

逻辑运算符

位运算

移位运算

条件语句

if 语句

三元表达式

switch

循环语句

while 循环

continue

break

for 循环

数组

创建数组

获取数组元素

新增数组元素

删除数组中的元素

函数

语法格式

关于参数个数

函数表达式

作用域

作用域链

对象

基本概念

1. 使用 字面量 创建对象 [常用]

2. 使用 new Object 创建对象

3. 使用 构造函数 创建对象


初识 JavaScript


JavaScript 是什么

JavaScript ( 简称 JS)
  • 是世界上最流行的编程语言之一
  • 是一个脚本语言, 通过解释器运行
  • 主要在客户端(浏览器)上运行, 现在也可以基于 node.js 在服务器端运行

JavaScript 最初只是为了完成简单的表单验证(验证数据合法性), 结果后来不小心就火了.

当前 JavaScript 已经成为了一个通用的编程语言

JavaScript 的能做的事情 :
  • 网页开发(更复杂的特效和用户交互)
  • 网页游戏开发
  • 服务器开发(node.js)
  • 桌面程序开发(Electron, VSCode 就是这么来的)
  • 手机 app 开发

发展历史

JavaScript 之父 布兰登 * 艾奇 (Brendan Eich)

1995 年, 用 10 天时间完成 JS 的设计 (由于设计时间太短,语言的一些细节考虑得不够严谨,导致 后来很长一段时间,Javascript 写出来的程序混乱不堪)

最初在网景公司, 命名为 LiveScript,

一般认为,当时 Netscape 之所以将 LiveScript 命名为 JavaScript,是因为 Java 是当时最流行的 编程语言,带有 "Java" 的名字有助于这门新生语言的传播。

其实 Java 和 JavaScript 之间的语法风格相去甚远。

JavaScript HTML CSS 之间的关系

  • HTML: 网页的结构()
  • CSS: 网页的表现()
  • JavaScript: 网页的行为()

JavaScript 运行过程

  • 编写的代码是保存在文件中的, 也就是存储在硬盘(外存上).
  • 双击 .html 文件浏览器(应用程序)就会读取文件, 把文件内容加载到内存中(数据流向: 硬盘 => 内存)
  • 浏览器会解析用户编写的代码, 把代码翻译成二进制的, 能让计算机识别的指令(解释器的工作)
  • 得到的二进制指令会被 CPU 加载并执行(数据流向: 内存 => CPU)

浏览器分成渲染引擎 + JS 引擎 .
  • 渲染引擎: 解析 html + CSS, 俗称 "内核"
  • JS 引擎: 也就是 JS 解释器. 典型的就是 Chrome 中内置的 V8

JavaScript 的组成

  • ECMAScript(简称 ES): JavaScript 语法
  • DOM: 页面文档对象模型, 对页面中的元素进行操作
  • BOM: 浏览器对象模型, 对浏览器窗口进行操作

光有 JS 语法, 只能写一些基础的逻辑流程.

但是要想完成更复杂的任务, 完成和浏览器以及页面的交互, 那么久需要 DOM API 和 BOM API.

重要概念: ECMAScript

这是一套 "标准", 无论是啥样的 JS 引擎都要遵守这个标准来实现.

前置知识


<script>
    alert("你好!");
</script>
  • JavaScript 代码可以嵌入到 HTML 的 script 标签中.

JavaScript 的书写形式

1. 行内式

直接嵌入到 html 元素内部
<input type="button" value="点我一下" onclick="alert('haha')">
注意
  • JS 中字符串常量可以使用单引号表示, 也可以 使用双引号表示.
  • HTML 中推荐使用双引号, JS 中推荐使用单引号.

2. 内嵌式

写到 script 标签中
<script>
    alert("haha");
</script>

3. 外部式

写到单独的 .js 文件中
<script src="hello.js"></script>
alert("hehe");

这种情况下 script 标签中间不能写代码. 必须空着(写了代码也不会执行).

注释

单行注释 // [建议使用]

多行注释 /* */

  • 使用 ctrl + / 切换注释.
  • 多行注释不能嵌套.

输入输出

输入: prompt

弹出一个输入框
// 弹出一个输入框
prompt("请输入您的姓名:");

输出: alert

弹出一个警示对话框 , 输出结果
// 弹出一个输出框
alert("hello");
  • + 表示字符串拼接, 也就是把两个字符串首尾相接变成一个字符串.
  • \n 表示换行

选择框:confirm

弹出一个选择对话框,确认或取消

// 弹出选择框
confirm("确认删除吗?");

输出: console.log

在控制台打印一个日志 ( 供程序员看 )
// 向控制台输出日志
console.log("这是一条日志");
  • 在 VSCode 中直接输入 "log" 再按 tab 键, 就可以快速输入 console.log

需要打开浏览器的开发者工具(F12) => Console 标签页 才能看到结果.

重要概念 : 日志
日志是程序员调试程序的重要手段
重要概念 : .
console 是一个 js 中的 " 对象 "
. 表示取对象中的某个属性或者方法 . 可以直观理解成 " "
console.log 就可以理解成 : 使用 " 控制台 " 对象 " " log 方法 .

语法概览


JavaScript 虽然一些设计理念和 Java 相去甚远, 但是在基础语法层面上还是有一些相似之处的. 有了Java 的基础很容易理解 JavaScript 的一些基本语法.

变量的使用

基本用法

创建变量(变量定义/变量声明/变量初始化)

var name = 'zhangsan';
var age = 20;
  • var JS 中的关键字, 表示这是一个变量.
  • = JS 中表示 "赋值", 相当于把数据放到内存的盒子中. = 两侧建议有一个空格
  • 每个语句最后带有一个 ; 结尾. JS 中可以省略 ; 但是建议还是加上.
  • 注意, 此处的 ; 为英文分号. JS 中所有的标点都是英文标点.
  • 初始化的值如果是字符串, 那么就要使用单引号或者双引号引起来.
  • 初始化的值如果是数字, 那么直接赋值即可.
使用变量
console.log(age); // 读取变量内容
age = 30;         // 修改变量内容

理解 动态类型

1) JS 的变量类型是程序运行过程中才确定的 ( 运行到 = 语句才会确定类型 )
var a = 10;     // 数字
var b = "hehe"; // 字符串
2) 随着程序运行 , 变量的类型可能会发生改变 .
var a = 10;    // 数字
a = "hehe";    // 字符串

基本数据类型

JS 中内置的几种类型
  • number: 数字. 不区分整数和小数.
  • boolean: true , false .
  • string: 字符串类型.
  • undefined: 只有唯一的值 undefined. 表示未定义的值.
  • null: 只有唯一的值 null. 表示空值.

number 数字类型

JS 中不区分整数和浮点数, 统一都使用 "数字类型" 来表示。

数字进制表示

var a = 07;      // 八进制整数, 以 0 开头
var b = 0xa;     // 十六进制整数, 以 0x 开头
var c = 0b10;    // 二进制整数, 以 0b 开头
注意 :
  • 一个八进制数字对应三个二进制数字
  • 一个十六进制数字对应四个二进制数字. (两个十六进制数字就是一个字节)

特殊的数字值

  • Infinity: 无穷大, 大于任何数字. 表示数字已经超过了 JS 能表示的范围.
  • -Infinity: 负无穷大, 小于任何数字. 表示数字已经超过了 JS 能表示的范围.
  • NaN: 表示当前的结果不是一个数字.
var max = Number.MAX_VALUE;
// 得到 Infinity
console.log(max * 2);
// 得到 -Infinity
console.log(-max * 2);
// 得到 NaN
console.log('hehe' - 10);
注意 :
  1. 负无穷大 和 无穷小 不是一回事. 无穷小指无限趋近与 0, 值为 1 / Infinity
  2. 'hehe' + 10 得到的不是 NaN, 而是 'hehe10', 会把数字隐式转成字符串, 再进行字符串拼接.
  3. 可以使用 isNaN 函数判定是不是一个非数字.

string 字符串类型

基本规则

字符串字面值需要使用引号引起来, 单引号双引号均可。

如果字符串中本来已经包含引号需要使用转义字符。

转义字符

有些字符不方便直接输入 , 于是要通过一些特殊方式来表示 .
  • \n
  • \\
  • \'
  • \"
  • \t

求长度

使用 String length 属性即可

字符串拼接

  • 使用 + 进行拼接
  • 数字和字符串也可以进行拼接

boolean 布尔类型

表示 "真" 和 "假"

  • Boolean 参与运算时当做 1 0 来看待.

undefined 未定义数据类型

如果一个变量没有被初始化过 , 结果就是 undefined, undefined 类型
var a;
console.log(a)
undefined 和字符串进行相加 , 结果进行字符串拼接
console.log(a + "10");  // undefined10
undefined 和数字进行相加 , 结果为 NaN
console.log(a + 10);

null 空值类型

null 表示当前的变量是一个 "空值".

var b = null;
console.log(b + 10);    // 10
console.log(b + "10");  // null10
注意 :
  • null undefined 都表示取值非法的情况, 但是侧重点不同.
  • null 表示当前的值为空. (相当于有一个空的盒子)
  • undefined 表示当前的变量未定义. (相当于连盒子都没有)

运算符

JavaScript 中的运算符和 Java 用法基本相同

算术运算符

  • +
  • -
  • *
  • /
  • %

赋值运算符 & 复合赋值运算符

  • =
  • +=
  • -=
  • *=
  • /=
  • %=

自增自减运算符

  • ++: 自增1
  • --: 自减1

比较运算符

  • <
  • >
  • <=
  • >=
  • == 比较相等(会进行隐式类型转换)
  • !=
  • === 比较相等(不会进行隐式类型转换)
  • !==

逻辑运算符

用于计算多个 boolean 表达式的值 .
  • && : 一假则假
  • || : 一真则真
  • !

位运算

  • & 按位与
  • | 按位或
  • ~ 按位取反
  • ^ 按位异或

移位运算

  • << 左移
  • >> 有符号右移(算术右移)
  • >>> 无符号右移(逻辑右移)

条件语句

if 语句

基本语法格式
条件表达式为 true, 则执行 if { } 中的代码
// 形式1
if (条件) {
    语句
}
// 形式2
if (条件) {
    语句1
} else {
    语句2
}
// 形式3
if (条件1) {
    语句1
} else if (条件2) {
    语句2   
} else if .... {
    语句...
} else {
    语句N
}

三元表达式

if else 的简化写法 .
条件 ? 表达式1 : 表达式2
条件为真 , 返回表达式 1 的值 . 条件为假 , 返回表达式 2 的值

switch

更适合多分支的场景
switch (表达式) {
    case 值1:
        语句1;
        break;
    case 值2:
        语句2:
        break;
    default:
        语句N;
}

循环语句

重复执行某些语句

while 循环

while (条件) {
    循环体;
}
执行过程 :
  • 先执行条件语句
  • 条件为 true, 执行循环体代码.
  • 条件为 false, 直接结束循环

continue

结束这次循环

break

结束整个循环

for 循环

for (表达式1; 表达式2; 表达式3) {
 循环体
}
  • 表达式1: 用于初始化循环变量.
  • 表达式2: 循环条件
  • 表达式3: 更新循环变量
执行过程 :
  • 先执行表达式1, 初始化循环变量
  • 再执行表达式2, 判定循环条件
  • 如果条件为 false, 结束循环
  • 如果条件为 true, 则执行循环体代码.
  • 执行表达式3 更新循环变量

数组

创建数组

使用 new 关键字创建
// Array 的 A 要大写
var arr = new Array();
使用字面量方式创建 [ 常用 ]
var arr = [];
var arr2 = [1, 2, 'haha', false]; // 数组中保存的内容称为 "元素"
  • JS 的数组不要求元素是相同类型

获取数组元素

  • 使用下标的方式访问数组元素( 0 开始)
  • 如果下标超出范围读取元素, 则结果为 undefined

新增数组元素

1. 通过修改 length 新增
相当于在末尾新增元素 . 新增的元素默认值为 undefined
2. 通过下标新增
如果下标超出范围赋值元素 , 则会给指定位置插入新元素
3. 使用 push 进行追加元素
var arr = [9, 5, 2, 7, 3, 6, 8];
var newArr = [];
for (var i = 0; i < arr.length; i++) {
   newArr.push(arr[i]);
}

删除数组中的元素

使用 splice 方法删除元素
var arr = [9, 5, 2, 7];
// 第一个参数表示从下表为 2 的位置开始删除. 第二个参数表示要删除的元素个数是 1 个
arr.splice(2, 1);
console.log(arr);
// 结果
[9, 5, 7]

函数

语法格式

// 创建函数/函数声明/函数定义
function 函数名(形参列表) {
    函数体
    return 返回值;
}
// 函数调用
函数名(实参列表)           // 不考虑返回值
返回值 = 函数名(实参列表)   // 考虑返回值
  • 函数定义并不会执行函数体内容, 必须要调用才会执行. 调用几次就会执行几次.
  • 调用函数的时候进入函数内部执行, 函数结束时回到调用位置继续执行. 可以借助调试器来观察.
  • 函数的定义和调用的先后顺序没有要求. (这一点和变量不同, 变量必须先定义再使用)

关于参数个数

实参和形参之间的个数可以不匹配. 但是实际开发一般要求形参和实参个数要匹配

  • 1) 如果实参个数比形参个数多, 则多出的参数不参与函数运算
  • 2) 如果实参个数比形参个数少, 则此时多出来的形参值为 undefined

函数表达式

另外一种函数的定义方式

var add = function() {
 var sum = 0;
    for (var i = 0; i < arguments.length; i++) {
        sum += arguments[i];
   }
    return sum;
}
console.log(add(10, 20));            // 30
console.log(add(1, 2, 3, 4));        // 10
console.log(typeof add);             // function
形如 function() { } 这样的写法定义了一个匿名函数 , 然后将这个匿名函数用一个变量来表示 .

作用域

某个标识符名字在代码中的有效范围.

在 ES6 标准之前, 作用域主要分成两个

  • 全局作用域: 在整个 script 标签中, 或者单独的 js 文件中生效.
  • 局部作用域/函数作用域: 在函数内部生效.

作用域链

背景 :
  • 函数可以定义在函数内部
  • 内层函数可以访问外层函数的局部变量.

对象

基本概念

对象是指一个具体的事物

在 JS 中, 字符串, 数值, 数组, 函数都是对象.

每个对象中包含若干的属性和方法 .
  • 属性: 事物的特征.
  • 方法: 事物的行为.

JavaScript 的对象 和 Java 的对象概念上基本一致. 只是具体的语法表项形式差别较大.

1. 使用 字面量 创建对象 [常用]

使用 { } 创建对象
  • 使用 { } 创建对象
  • 属性和方法使用键值对的形式来组织.
  • 键值对之间使用 , 分割. 最后一个属性后面的 , 可有可无
  • 键和值之间使用 : 分割.
  • 方法的值是一个匿名函数

2. 使用 new Object 创建对象

var student = new Object(); // 和创建数组类似
student.name = "蔡徐坤";
student.height = 175;
student['weight'] = 170;
student.sayHello = function () {
    console.log("hello");
}

3. 使用 构造函数 创建对象

前面的创建对象方式只能创建一个对象. 而使用构造函数可以很方便 的创建 多个对象

function 构造函数名(形参) {
    this.属性 = 值;
    this.方法 = function...
}
    
var obj = new 构造函数名(实参);
注意 :
  • 在构造函数内部使用 this 关键字来表示当前正在构建的对象.
  • 构造函数的函数名首字母一般是大写的.
  • 构造函数的函数名可以是名词.
  • 构造函数不需要 return
  • 创建对象的时候必须使用 new 关键字.

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

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

相关文章

如何用 TDengine 预测 “未来”

介绍 TDengine™ 是一种开源的云原生时序数据库&#xff08;Time Series Database&#xff0c;TSDB&#xff09;&#xff0c;专为物联网&#xff08;IoT&#xff09;、连接汽车和工业物联网进行了优化。它能够高效地实时摄取、处理和监控一天内由数十亿个传感器和数据收集器产…

美女小姐姐是你得菜吗~PYTHON采集西瓜小姐姐

目录标题 前言第三方模块&#xff1a;环境介绍:基本流程:代码展示尾语 前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! 第三方模块&#xff1a; requests >>> pip install requests 第三方模块安装: win R 输入cmd 输入安装命令 pip install 模块名 (如果你觉…

Matlab|改进的粒子群算法优化支持向量机(多分类)

作者在前面的文章中介绍了粒子群算法的原理及其2种改进算法&#xff0c;本文将基于这三种优化方法&#xff0c;应用于支持向量机进行分类&#xff0c;并对比改进算法与标准粒子群算法的分类性能&#xff0c;结果显示改进后的方法能够得到更佳的分类效果。&#xff08;在对PSO-S…

小程序实现自定义分享微信好友

首先在全局page.json中添加"shareAppMessage": true {"path": "pages/brandCoupon/brandCoupon","style": {"navigationBarTitleText": "霸王餐","navigationStyle": "custom","enable…

3D建模软件、Creo 3D 、Creo8安装、下载教程

PTC Creo 8.0 是一款三维 CAD 软件&#xff0c;适用于多个行业和应用场景&#xff0c;包括机械设计、工业设计、电子设计等等。以下是 PTC Creo 8.0 的功能介绍和安装条件&#xff1a; 功能介绍&#xff1a; 三维建模&#xff1a;可以使用多种工具进行三维建模&#xff0c;包…

【python】生成时间戳+读取csv最后一列+生成一组随机数

1.按照间隔生成时间戳,并保存为csv文件 ##### 按照间隔生成时间戳,并保存为csv文件 import pandas as pd from datetime import datetime, time, timedelta times [] ts datetime(2023, 6, 17, 9, 10, 0) while ts < datetime(2023, 6, 17, 9, 26, 40):# times.append(t…

Leetcode 75算法题( 上)(使用C++实现)

目录 数组 / 字符串 1768.交替合并字符串 1071、字符串中的最大公因子 1431. 拥有最多糖果的孩子 605. 种花问题 345. 反转字符串中的元音字母 151. 反转字符串中的单词 238. 除自身以外数组的乘积 334. 递增的三元子序列 443. 压缩字符串 双指针 283. 移动零 392. 判断…

【狂神】MySQL - 连表查询 Join On 详解

1. 连表查询详解 市面上有 7 种连表查询, 总共归为三大类 : 左查询 LEFT JOIN -- 以左表为基准右查询 RIGHT JOIN -- 以右表为基准交叉查询 INNER JOIN -- 查询两表都有的数据 操作描述inner join如果表中至少有一个匹配, 就返回行left join会从左表中返回所有的值…

基于django的数据可视化展现

今天给大家简单分享一下一个基于python的django的框架写的一个数据可视化的项目。 主要涉及技术&#xff1a;django基础&#xff0c;python基础&#xff0c;前端&#xff08;html&#xff0c;echars&#xff09;基础。 这个项目自然而然是基于python逻辑语言处理的&#xff0…

好选客干货分享:化纤长丝找外贸客户

化纤长丝概述 化纤长丝是将聚合物材料&#xff08;如&#xff1a;聚酯、聚酰胺、聚酰胺酯等&#xff09;通过化学反应和纺丝工艺转化制成的连续的细长纤维&#xff0c;具有低成本、高强度、高弹性的优点&#xff0c;与天然纤维相比&#xff0c;其抗皱性和耐磨性也更胜一筹&…

隐秘的角落——proxychains代理工具

互联网只因你太美&#xff0c;自千禧年之后影响了数十年&#xff0c;无数的弄潮儿和狂热者为你痴迷&#xff0c;也有不尽的黑子们就安全问题而争议。直到现在&#xff0c;HTTPS、SSH、SOCKS、VPN、IPsec等技术逐渐为大众所接受&#xff0c;无法割舍。而这次&#xff0c;我将介绍…

防止网络断联,双机热备这么部署就对了

你们好&#xff0c;我的网工朋友。 防火墙的基本功能、配置案例、怎么提升网络的可靠性&#xff0c;给你说过不少。 但有小友留言说&#xff0c;双机热备的知识点&#xff0c;好像没有系统讲过&#xff0c;我去翻了翻&#xff0c;还真是。 为了保证网络的不间断传输&#xf…

浅谈有源电力滤波器及配电能效平台在污水处理厂中的应用

【摘要】为减少污水处理设备产生的各次谐波&#xff0c;通过确定主要谐波源&#xff0c;检测和计算谐波分量&#xff0c;采用有源电力滤波器进行谐波治理&#xff0c;大幅降低了电力系统中的三相电流畸变率&#xff0c;提高了电能质量&#xff1b;抑制了谐波分量&#xff0c;减…

顺序表与链表

思维导图&#xff1a; 顺序表与链表都是两种线性表&#xff0c;但是两者之间又有着许多的不同。顺序表是一种连续的空间&#xff0c;实际上就是数组。链表是不连续的空间&#xff0c;链表的空间是一块一块的开辟出来的。 两者的优点与缺点&#xff1a; 顺序表&#xff1a; 优点…

86、基于STM32的电动车 小车蓄电池锂电池充电桩系统设计(程序+原理图+PCB源文件+硬件资料+元器件清单等)

单片机主芯片选择方案 方案一&#xff1a;AT89C51是美国ATMEL公司生产的低电压&#xff0c;高性能CMOS型8位单片机&#xff0c;器件采用ATMEL公司的高密度、非易失性存储技术生产&#xff0c;兼容标准MCS-51指令系统&#xff0c;片内置通用8位中央处理器(CPU)和Flash存储单元&a…

云计算——虚拟化层架构

作者简介&#xff1a;一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​ 前言 本章将会讲解云计算的虚拟化层架构&#xff0c;了解云计算虚拟化层都有哪些架构模式…

23. 销售额完成任务指标的商品

文章目录 题目需求存在的疑问实现一题目来源 题目需求 商家要求每个商品每个月需要售卖出一定的销售总额 假设1号商品销售总额大于21000&#xff0c;2号商品销售总额大于10000&#xff0c;其余商品没有要求 请写出SQL从订单详情表中&#xff08;order_detail&#xff09;查询连…

多元分类预测 | Matlab基于深度置信网络DBN的分类预测,多特征输入模型,DBN分类预测

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述

MySQL的match函数在sp中使用的BUG解析

一、问题发现 在一次开发中在sp中使用MySQL PREPARE以后&#xff0c;使用match AGAINST语句作为prepare stmt的参数后&#xff0c;发现执行第二遍call会导致数据库crash&#xff0c;于是开始动手调查问题发生的原因。 注&#xff1a;本次使用的 MySQL 数据库版本为最新的debug…

文件改名神器!简体中文一键翻译为繁体中文并智能保存到指定文件夹!

在这个简繁转换教程中&#xff0c;您将学习如何使用简单的方法将简体中文文件快速翻译为繁体中文&#xff0c;并将其保存至指定的文件夹中。无需复杂的翻译软件或多步操作&#xff0c;只需跟随以下步骤&#xff0c;您就能实现简繁转换的便捷保存。 首先第一步&#xff0c;我们…