从“雷峰塔”到“对象”:JavaScript基础语法入门指南

从"雷峰塔"到"对象":一份超详细的JavaScript基础语法入门指南

摘要:JavaScript(简称JS)是世界上最流行的编程语言之一。从最初仅用于简单的表单验证,到如今涵盖网页开发、服务器开发(Node.js)、桌面应用(Electron)甚至手机App开发,JS已经成为了通用的编程语言。本文将带你从零开始,梳理JavaScript的基础语法、数据类型、流程控制、数组与函数,以及对象的核心概念。

一、 初识JavaScript:语言的前世今生

1.1 JavaScript是什么?

JavaScript是一个脚本语言,通过解释器运行,主要在客户端(浏览器)上运行,现在也可以基于Node.js在服务器端运行。它的初衷只是为了完成简单的表单验证,但后来"不小心"火了,成为了通用的编程语言。

1.2 发展历史与"雷峰塔"梗

JavaScript之父是布兰登·艾奇(Brendan Eich)。1995年,他用10天时间完成了JS的设计(由于设计时间太短,导致后来很长一段时间JS程序混乱不堪)。最初在网景公司命名为LiveScript,后因Java当时最流行,便改名JavaScript。

Java和JavaScript的关系,就像:

  • 雷峰和雷峰塔
  • 印度和印度尼西亚
  • 周杰和 rappers 周杰伦
  • 张三和张三丰
  • 黑客和博客

其实它们语法风格相去甚远,但目前基础语法层面还是有一些相似之处的。

1.3 JS与HTML、CSS的关系

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

1.4 JS的组成

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

注意:如果是运行在服务端的JS(Node.js),则不太需要关注DOM和BOM。


二、 快速上手:第一个程序与注释

2.1 引入JS的三种方式

  1. 行内式 :直接嵌入到HTML元素内部(如 onclick="alert('haha')")。
  2. 内嵌式 :写到 <script> 标签中。
  3. 外部式 :写到单独的 .js 文件中,通过 <script src="hello.js"></script> 引入。注意:此时script标签中间不能写代码。

2.2 注释

  • 单行注释 :// (推荐使用)
  • 多行注释 :/* */ (注意:多行注释不能嵌套)

2.3 输入与输出

  • 输入 :prompt("请输入您的姓名:"); 弹出一个输入框。
  • 输出 :alert("hello"); 弹出警示对话框。
  • 日志 :console.log("这是一条日志"); 在控制台打印,这是程序员调试的重要手段。

console 是一个JS中的"对象",. 可以直观理解成"的",console.log 就是使用"控制台"对象的"log"方法。


三、 变量与数据类型:动态类型的魅力

3.1 变量的使用

使用 var 关键字定义变量(ES6中新增了 let,用法基本类似):

javascript 复制代码
var name = 'zhangsan';
var age = 20;
  • = 表示赋值。
  • JS中所有的标点都是英文标点。
  • 字符串需使用单引号或双引号引起来。
  • 动态类型:JS的变量类型是程序运行过程中才确定的,且随着程序运行,变量的类型可能会发生改变(这一点和C、Java等静态类型语言差异较大)。

3.2 基本数据类型

JS中内置了以下几种类型:

  • number :数字(不区分整数和小数)。支持八进制(0开头)、十六进制(0x开头)、二进制(0b开头)。特殊值包括 Infinity(无穷大)、-Infinity(负无穷大)、NaN(非数字)。
  • boolean :true 真,false 假。参与运算时当做 1 和 0 看待。
  • string:字符串类型。
  • undefined :只有唯一的值 undefined,表示未定义的值(相当于连盒子都没有)。
  • null :只有唯一的值 null,表示空值(相当于有一个空的盒子)。

3.3 字符串的拼接

使用 + 进行拼接。如果数字和字符串拼接,会把数字隐式转成字符串。

javascript 复制代码
console.log(100 + 100); // 200
console.log('100' + 100); // 100100

四、 运算符与流程控制

4.1 运算符

和Java用法基本相同,包括:

  • 算术运算符 :+ - * / %
  • 赋值运算符 := += -= *= /= %=
  • 自增自减 :++ --
  • 比较运算符 :< > <= >= == != === !== (== 会进行隐式类型转换,=== 不会)
  • 逻辑运算符 :&& || !
  • 位运算与移位运算 :& | ~ ^ << >> >>>

4.2 条件语句

  • if / else if / else
  • 三元表达式 :条件 ? 表达式1 : 表达式2(if else的简化写法,优先级较低)
  • switch :更适合多分支的场景,注意每个case后要加 break。

4.3 循环语句

  • while循环:先判断条件,再执行循环体。
  • continue:结束这次循环,继续下一次。
  • break:结束整个循环。
  • for循环 :for (表达式1; 表达式2; 表达式3) { 循环体 }。

五、 数组与函数

5.1 数组

JS的数组不要求元素是相同类型(和Python等动态语言类似)。

javascript 复制代码
var arr = [1, 2, 'haha', false];
  • 获取元素 :通过下标访问(从0开始),超出范围读取结果为 undefined。
  • 新增元素 :
    • 修改 length 属性(末尾新增)。
    • 通过下标新增(如果下标超出范围)。
    • 使用 push 方法追加元素。
  • 删除元素 :使用 splice 方法(arr.splice(起始下标, 删除个数))。

5.2 函数

javascript 复制代码
function 函数名(形参列表) {
    // 函数体
    return 返回值;
}
  • 函数定义不会执行,必须调用才会执行。
  • 函数的定义和调用的先后顺序没有要求(这一点和变量不同)。
  • 实参和形参个数可以不匹配(但实际开发一般要求匹配)。
  • 函数表达式 :var add = function() { ... },将匿名函数赋值给变量。JS中函数是一等公民,可以像变量一样传递。

5.3 作用域

  • 全局作用域:在整个script标签或单独的js文件中生效。
  • 局部作用域/函数作用域:在函数内部生效。
  • 作用域链:查找变量时,先在当前局部作用域找,找不到去上层找,最后去全局找。

六、 对象:具体事物的抽象

6.1 基本概念

对象是指一个具体的事物(如"我的联想笔记本")。每个对象包含若干的属性 (特征)和方法 (行为)。

JavaScript的对象和Java的对象概念上基本一致,但语法表现形式差别较大。

6.2 创建对象

1. 使用字面量创建(常用)

javascript 复制代码
var student = {
    name: '蔡徐坤',
    height: 175,
    weight: 170,
    sayHello: function() {
        console.log("hello");
    }
};
  • 属性和方法使用键值对的形式组织。
  • 键和值之间使用 : 分割,键值对之间使用 , 分割。
  • 访问属性:student.name 或 student['height']。
  • 调用方法:student.sayHello()。

2. 使用构造函数创建

前面的方式只能创建一个对象,构造函数可以方便地创建多个对象。

javascript 复制代码
function Cat(name, type, sound) {
    this.name = name;
    this.type = type;
    this.miao = function() {
        console.log(sound);
    }
}
var mimi = new Cat("咪咪", "中华田园喵", "喵");
  • this 关键字表示当前正在构建的对象。
  • 构造函数名首字母一般大写。
  • 创建对象必须使用 new 关键字。

6.3 JS对象与Java对象的区别

  1. JS没有"类"的概念:对象其实就是"属性"+"方法"。(ES6中引入了class关键字)。
  2. JS对象不区分"属性"和"方法":JS中的函数是一等公民。
  3. JS对象没有 private / public 等访问控制机制:对象中的属性都可以被外界随意访问。
  4. JS对象没有"继承" :继承本质是让两个对象建立关联。JS使用原型 (__proto__)机制实现类似的效果。
  5. JS没有"多态":因为JS本身就支持动态类型,程序猿在使用对象的方法时不需要明确区分类型。

结语

JavaScript虽然设计之初有些仓促,但经过多年的发展,ECMAScript标准不断完善,它已经变得非常强大和灵活。掌握好基础语法,理解其动态类型、函数一等公民和原型链等核心概念,是迈向高级前端开发或全栈开发的重要一步。希望这篇博客能帮你梳理清楚JS的基础脉络!

相关推荐
ReStock活库1 小时前
Zephyr异步SPI调用返回后,为什么不能立即复用发送缓冲区?
java·前端·网络
计算机魔术师1 小时前
半年营收163亿,算力债却到7800亿,这账谁算得清
前端
chunyublog2 小时前
HDFS 上传文件名空格问题排障教程
前端·javascript·npm
?abc!2 小时前
(贪心)621. 任务调度器
java·前端·c#
摸鱼仙人~3 小时前
校招帮简历字段匹配架构分析报告
java·前端·架构
陈随易3 小时前
副业搞钱点子之赛事与活动
前端·后端·程序员
电梯界知识分子3 小时前
景德镇老房重新设计阶段规划楼梯与电梯,1.7m×1.6m空间装400kg观光电梯,棕色框架茶色玻璃适配中式装修
大数据·服务器·前端·网络·家用电梯
Shell运维手记3 小时前
Shell 脚本入门课堂讲解
前端·chrome
Profile排查笔记3 小时前
有哪些开源指纹浏览器项目?先核对客户端、内核与许可证
前端·人工智能·后端·自动化