JavaScript基础入门

文章目录

JavaScript基础语法

简介

JavaScript是基于对象和时间驱动并具有相对安全性的客户端脚本语言

Javascript组成

  • JavaScript的核心语法ECMAScript描述了该语言的语法和基本对象
  • 文档对象模型(DOM)------ 描述了处理网页内容的方法和接口
  • 浏览器对象模型(BOM)------ 描述了与浏览器进行交互的方法和接口

基本用法

  • 行内JS:写在标签内部的JS代码
  • 内部JS:定义在script标签中的代码(一般置于body标签后面)
  • 外部JS:单独的js文件,在HTML中通过scrip标签引入
javascript 复制代码
//行内JS:
<button onclick="alert('you clicked hered!!!')">click here</button>

//内部JS:
<script type="text/javascript">
	alert('this is inner js code')//弹窗
</script>

//外部JS文件:
//hello.js
alert('this is a outter js document');

//hello.html
<!-- 在需要使用js的html页面中引入 -->
<script src="js/hello.js" type="text/javascript" charset="utf-8"></script>

语句和注解

JavaScript程序的执行单位为行(line),也就是一行一行地执行,一般情况下,每一行就是一个语句。

javascript 复制代码
单行注释://注释内容
多行注释:/* 注释内容 */
兼容html注释方式:<!--注释内容-->

标识符和关键字

标识符

javascript 复制代码
//规则
由Unicode字母、_、$、数字组成、中文组成
(1)不能以数字开头
(2)不能是关键字和保留字
(3)严格区分大小写

//规范
(1)见名知意
(2)驼峰命名或下划线规则

关键字

关键字分类 关键字列表
变量声明 varletconst
流程控制(条件) ifelseswitchcasedefault
流程控制(循环) forwhiledobreakcontinuefor...infor...of
函数相关 functionreturnargumentsthisnew
异常处理 trycatchfinallythrow
类型判断 / 操作 typeofinstanceofdeletevoid
其他核心关键字 nullundefinedtruefalseclassextendssuperimportexportmoduleyieldasyncawait

变量

变量的声明

javascript 复制代码
// 先声明再赋值
 var a ;
 a = 10;
// 声明同时赋值
 var b = 20;
  • 只声明未定义------------返回undifined(不报错)
  • 未声明就使用------------则报错(报错,则后面的代码不执行)
  • js中单引号和双引号用处一样
  • JavaScript是一种动态类型、弱类型语言,可以赋予各种类型的值
javascript 复制代码
//可以在同一条var命令中声明多个变量
var a, b, c = 10;

//使用var重新声明一个已经存在的变量,是无效的
var box = 10
var box;

//使用var声明一个已经存在的变量并赋值,则覆盖原来的值
var box = 10;
var box = 25;

变量的提升

使用 var 声明的变量,其声明会被提升到作用域顶部,但赋值不会提升

javascript 复制代码
console.log(a); // 输出 undefined
var a = 5;

//实际的执行顺序如下
var a;
console.log(a); 
a = 5;

数据类型

JavaScript 中有6 种数据类型,其中有五种简单的数据类型: UndefinedNull布尔数值字符串Object

javascript 复制代码
数 值(Number): 整数和小数(比如 1 和 3.14)
//所有数字(整型和浮点型)都是以 64 位浮点数形式储存。所以,JS中1 与 1.0 相等,而且 1 加上 1.0 得到的还是一个整数,浮点数最高精度是17位小数

字符串(String): 字符组成的文本(比如"Hello World")
//1)当 + 两边有一个是字符串时,执行字符串拼接;否则执行数字相加
//2)所有类型转字符串都是加引号

布尔值(Boolean):true(真)和 false(假)两个特定值

Undefined: 表示"未定义"或不存在,即此处目前没有任何值
//1)调用函数时,该函数有形参,但未提供实参,则该参数为undefined
//2)函数没有返回值时,默认返回 undefined

Null: 表示空缺,即此处应该有一个值,但目前为空
//1)使用typeof操作符测试null返回object字符串
//2)undefined派生自null,所以等值比较返回值是true。未初始化的变量和赋值为null的变量相等

对象(object)(引用) : 各种值组成的集合
1)、对象(object){name:"zhangsan",age:"18"}
2)、数组(array)[1,2,3]
3)、函数(function)function test() {}

数据类型转换

自动类型转换

函数转换

parseInt()

判断它是否是个有效数字,如果不是,则直接返回NaN,不再继续,如果是则继续,直到找到非字符

javascript 复制代码
parseInt("1234blue"); // returns 1234
parseInt("22.5"); // returns 22
parseInt("blue"); // returns NaN
pasefloat(识别一个小数点)

从位置 0 开始查看每个字符,直到找到第一个非有效的字符为止。不过,对于这个方法来说,第一个出现的小数点是有效字符。如果有两个小数点,第二个小数点将被看作无效的

javascript 复制代码
parseFloat("1234blue"); // returns 1234.0
parseFloat("22.5"); // returns 22.5
parseFloat("22.34.5"); // returns 22.34
parseFloat("blue"); //returns NaN

显示转换

toString()函数
javascript 复制代码
// 将内容转换为字符串形式
var data = 10
console.log(data.toString())
// 根据小数点后指定位数将数字转为字符串,四舍五入
data = 1.4;
console.log(data.toFixed(0));
data = 1.49;
// 不能对null和undefined使用
data = null
console.log(data.toString())
data = undefined
console.log(data.toString())

对 null 或undefined 值强制类型转换会报错

toFixed()函数

将根据小数点后指定位数将数字转为字符串,四舍五入

javascript 复制代码
var b = 12.23;
console.log(b.toFixed(0));
//toFixed填的数字为保留的小数位数,0则为取整
构造方法
javascript 复制代码
Number(false) 0
Number(true) 1
Number(undefined) NaN
Number(null) 0
Number( "5.5 ") 5.5
Number( "56 ") 56
Number( "5.6.7 ") NaN
Number(new Object()) NaN
Number(100) 100
Boolean(""); // false -- empty string
Boolean("hi"); // true -- non-empty
string
Boolean(100); // true -- non-zero
number
Boolean(null); // false - null
Boolean(0); // false - zero
Boolean(new Object()); // true -- object
String()方法

可把任何值转换成字符串

javascript 复制代码
var s1 = String(null); // "null"
var oNull = null;
var s2 = oNull.toString(); // won't work, causes anerror

对 null 或undefined 值强制类型转换可以生成字符串而不引发错误

运算符

运算符分类 运算符 说明 示例
算术运算符 + 加法或字符串拼接 2 + 3 → 5"a" + "b" → "ab"
- 减法 5 - 2 → 3
* 乘法 3 * 4 → 12
/ 除法(结果为浮点数) 10 / 3 → 3.333...
% 取模(余数) 10 % 3 → 1
++ 自增(前置:先增后用;后置:先用后增) let a=2; a++ → 2(a 变为 3)
-- 自减(规则同自增) let b=3; --b → 2(b 变为 2)
赋值运算符 = 基础赋值 let x = 5
+= 加法赋值(x += y 等价于 x = x + y) let a=2; a += 3 → a=5
-= 减法赋值 let b=5; b -= 2 → b=3
*= 乘法赋值 let c=3; c *= 4 → c=12
/= 除法赋值 let d=10; d /= 2 → d=5
%= 取模赋值 let e=10; e %= 3 → e=1
比较运算符 == 相等(宽松比较,自动类型转换) 5 == "5" → true
=== 严格相等(不转换类型,值和类型都需相同) 5 === "5" → false
!= 不相等(宽松比较) 5 != "5" → false
!== 严格不相等 5 !== "5" → true
> 大于 6 > 3 → true
< 小于 2 < 5 → true
>= 大于等于 4 >= 4 → true
<= 小于等于 3 <= 2 → false
逻辑运算符 && 逻辑与(短路:左侧为假则返回左侧,否则返回右侧) true && 5 → 5false && 5 → false
! 逻辑非(取反,先转布尔值) !true → false!0 → true
三元运算符 condition ? expr1 : expr2 条件判断:condition 为真则返回 expr1,否则返回 expr2 3 > 5 ? "yes" : "no" → "no"

数组

数组的定义

javascript 复制代码
var arr = [值1,值2,值3]; // 隐式创建
var arr = new Array(值1,值2,值3); // 直接实例化
var arr = new Array(size); // 创建数组并指定长度

基本操作

javascript 复制代码
//数组的长度可以通过length属性来获取,并可以任意更改
数组名.length = 新长度

//数组中的每一个元素都可以被访问和修改,甚至是不存在的元素,无所谓越界
数组名[下标]
数组名[下标] = 新值

数组的遍历

普通的for循环遍历
javascript 复制代码
for(var i=0; i<=数组.length-1; i++){
}
//注意变量用var声明
for ... in
javascript 复制代码
for(var 下标(名称任意) in 数组名){
数组名[下标]是获取元素
} // 下标(名称任意)
如:
for(var idx in arr){
console.log(arr[idx]);
}
forEach
javascript 复制代码
数组名.forEach(function(element,index){
// element(名称任意):元素,index(名称任意):下标
})
如:
arr.forEach(function(elem,idx){
	console.log(idx + "-->" + elem);
});
注意
复制代码
数组在使用的时候建议大家规矩来用。在存放数据时,从下标0开始顺序的存放数组元素。
如果下标:
	1.为非负整数(包括整数字符串):自动从0开始,不存在添加undefined
	2.为负数、小数、非数字符串:这些内容不计算在长度内,当成"属性"处理,相当于自定义属性。
	
数组非常灵活,使用数组元素
	1.下标: 非负整数(包括整数字符串):
		数组[下标]
	2.下标:负数、小数、非数字字符串:
		数组[属性]
* for --> 不遍历属性
* foreach -->不遍历属性和索引中的undefined
* for in -->不遍历索引中的undefined
  • 数组如果下标存在就是覆盖旧值,如果不存在就是添加新元素
  • 如果定义数组长度,则未赋值的元素为undefined

数组方法

复制代码
push 添加元素到最后(常用)
unshift 添加元素到最前(常用)
pop 删除最后一项(常用)
shift 删除第一项(常用)
reverse 数组翻转(常用)
join 数组转成字符串
indexOf 数组元素索引
slice 截取(切片)数组,原数组不发生变化
splice 剪接数组,原数组变化,可以实现前后删除效果
concat 数组合并

函数

函数即方法,可以反复调用。函数也是对象

函数的定义

函数声明语句
javascript 复制代码
function 函数名([参数列表]){
}
例如:
function foo(){
console.log(1);
}
foo();

// 给参数默认值
function defaultValue(a){
	a = a || "a";
	return a;
}
console.log(defaultValue());
function f(a){
//若参数a不为undefined或null,则取本身的值,否则给一个默认值
    (a !== undefined && a !== null) ? a = a : a= 1;
	return a;
}
console.log(f());

该种方式定义的函数具有声明提升的效果

javascript 复制代码
foo();
function foo(){
	console.log(1);
}
// 变量声明提升
console.log( a );
var a = 2;
函数定义表达式
javascript 复制代码
//直接获得返回值
var 变量名 = function ([参数列表]) {
}
变量名();
例如:
var fun = function(){
	console.log("Hello");
}
fun();
Function构造函数
javascript 复制代码
var add = new Function('x','y','return (x + y)');//最后写返回值
// 等同于
function add(x, y) {
	return (x + y);
}
add();
  • js中的函数没有重载,同名的函数,会被后面的函数覆盖

  • 有参函数无需声明形参参数类型

  • 实参可以省略,那么对应形参为undefined

  • 参数为值传递,传递副本 ;引用传递时传递地址,操作的是同一个对象

  • 可以给参数设置默认值

函数的调用

javascript 复制代码
//常用调用
函数名([实参]);

//函数调用
function add(a,b){
	return a+b;
}
var sum = add(1,2);

//方法调用
var o = {
	m: function(){
		console.log(1);
	}
};
o.m();

函数的作用域

只有函数才有作用域(其他代码块没有作用域)

经典问题1
javascript 复制代码
//全局变量与局部变量同名问题
var box =1; // 全局变量
function display(box){
	var box = 3; // 此处box与全局变量box没有关系,这里的box为传递的参数,相当于新声明的局部变量
	var b = 2; // 局部变量
	console.log("box-->" + box);
}
display();
// b 不能访问
console.log("b-->" + b);
经典问题2
javascript 复制代码
//在函数中定义变量时,若没有加var关键字,使用之后自动变为全局变量
function fun(){
	a = 100;
}
fun();
alert(a);

函数内部定义变量,建议加上var,如果要定义全局变量,则放置在函数外部

内置对象

复制代码
Arguments 只在函数内部定义,保存了函数的实参
Array 数组对象
Date 日期对象,用来创建和获取日期
Math 数学对象
String 字符串对象,提供对字符串的一系列操作

String

复制代码
charAt(idx) 返回指定位置处的字符
indexOf(Chr) 返回指定子字符串的位置,从左到右。找不到返回-1
substr(m,n) 返回给定字符串中从m位置开始,取n个字符,如果参数n省略,则意味着取到字符串末尾。
substring(m,n) 返回给定字符串中从m位置开始,到n位置结束,如果参数n省略,则意味着取到字符串末尾。
toLowerCase() 将字符串中的字符全部转化成小写。
toUpperCase() 将字符串中的字符全部转化成大写。
length 属性,不是方法,返回字符串的长度。

Math

复制代码
Math.random() 随机数
Math.ceil() 向上取整,大于最大整数
Math.floor() 向小取整,小于最小整数String

Date

复制代码
// 获取日期
◦ getFullYear() 年
◦ getMonth() 月
◦ getDate() 日
◦ getHours() 时
◦ getMinutes() 分
◦ getSeconds() 秒
// 设置日期
◦ setYear()
◦ setMonth()
◦ setDate()
◦ setHours()
◦ setMinutes()
◦ setSeconds()
◦ toLoacaleString() 转换成本地时间字符串

注意:

  • getMonth():得到的值:0-11(1月~12月)

  • setMonth():设置值时0~11

  • toLocaleString():可根据本地时间把 Date 对象转换为字符串,并返回结果。

对象

对象,就是一种无序的数据集合,由若干个"键值对"(key-value)构成。JavaScript对象满足的这种"键值对"的格式我们称为JSON格式(JSON对象)

对象的创建

字面量形式创建(常用)
javascript 复制代码
var 对象名 = {};//创建一个空的对象
var 对象名 = {键:值,键2:值2,...}
var obj = {
	'name' : 'hello',
	age : 12,
	sayHello : function () {
	console.log("我是对象中的方法");//存放方法
},
	courses : {
		javase : 4,
		javascript : 3//最后的不加逗号
	},//存放对象
	isLike : true,
	members : [
		{name : "小红",age : 20},
		{name : "小绿",age : 22},
		{name : "小蓝",age : 27},
		{name : "小黄"}
	]
};

不加属性尾逗号

通过new Object创建
javascript 复制代码
var 对象名 = new Object(); // 创建一个空的对象
var obj = new Object();
obj.name = 'zs';
obj.age = 18;
console.log(obj);
通过Object对象的create方法创建
javascript 复制代码
var 对象名 = Object.create(null);
var obj = Object.create(null);
obj.name = 'ls';
obj.gender = true
console.log(obj);
var objn = Object.create(obj);
objn.age = 18;
console.log(objn);
console.log(objn.gender)

对象的序列化和反序列化

序列化即将JS对象序列化为字符串,反序列化即将字符串反序列化为JS对象

javascript 复制代码
// 序列化对象,将对象转为字符串
JSON.stringify(object);

// 反序列化,将一个Json字符串转换为对象。
JSON.parse(jsonStr);

this

谁调用this,则指代的就是谁

在函数中使用this

在函数中使用this属于全局性调用,代表全局对象,通过window对象来访问

javascript 复制代码
function test () {
	this.x = 1;
	console.log(this.x);
}
test();
console.log(x); // 相当于定义在全局对象上的属性

var x = 10;
console.log(x) // 10
	function test (){
		console.log(this.x) // 10
		this.x = 1;
		console.log(this.x) // 1
		console.log(this)
	}

test();
console.log(x); // 1
console.log(this);
在对象中使用this

在对象中的函数使用this,代表当前的上级对象

javascript 复制代码
var obj = {
	name : '张三',
	age : 20,
	sayHello : function () {
		console.log(this.name)
		console.log(this)
	}
}
obj.sayHello();
相关推荐
oioihoii2 小时前
智能体颠覆教育行业:现状、应用与未来展望调研报告
开发语言
常常不爱学习2 小时前
Vue3 + TypeScript学习
开发语言·css·学习·typescript·html
No0d1es2 小时前
2025年 CSP-J1 入门级初赛 C++真题
开发语言·c++·青少年编程·csp·信息学奥赛·初赛
Halo_tjn2 小时前
基于 Object 类及包装类的专项实验
java·开发语言·计算机
baozj2 小时前
🚀 手动改 500 个文件?不存在的!我用 AST 撸了个 Vue 国际化神器
前端·javascript·vue.js
拾忆,想起2 小时前
超时重传 vs 快速重传:TCP双保险如何拯救网络丢包?
java·开发语言·网络·数据库·网络协议·tcp/ip·php
@老蝴2 小时前
Java EE - 线程的状态
开发语言·java-ee·intellij-idea
budingxiaomoli2 小时前
多线程(一)
java·开发语言·jvm·java-ee
Yue丶越3 小时前
【C语言】深入理解指针(二)
c语言·开发语言·数据结构·算法·排序算法