JavaScript(简称JS)是一种Web前端开发中常用的脚本语言。它为网页添加了很多动态效果、交互功能和数据处理能力,使得网页不再是单调的静态页面,而成为了一个更加多彩、有趣且具有实用性的应用程序。
JS代码可以嵌入到HTML页面中,也可以通过外部文件进行引入。
DOCTYPE html>
<html>
<head>
<title>JS Demotitle>
head>
<body>
<script>
// JS 代码
script>
body>
html>
DOCTYPE html>
<html>
<head>
<title>JS Demotitle>
<script src="js/main.js">script>
head>
<body>
body>
html>
其中,src属性指定了.js文件所在的路径。
JavaScript是一种动态类型的语言,因此在使用变量时不需要声明具体的数据类型。在JavaScript中,变量的声明可以使用var、let和const关键字进行。
var和let声明的变量是可修改的,const声明的变量是不可修改的常量。
变量的赋值直接用=即可
// 使用var关键字声明变量
var num = 10;
var name = "Jack";
// 使用let关键字声明变量
let age = 20;
let isStudent = true;
// 使用const关键字声明变量
const PI = 3.14;
在JavaScript中,使用等号(=)进行赋值操作。
var a = 10;
常见的算术运算符包括加(+)减(-)乘(*)除(/)和取余(%)
var a = 10;
var b = 3;
console.log(a + b); // 输出13
console.log(a - b); // 输出7
console.log(a * b); // 输出30
console.log(a / b); // 输出3.33333
console.log(a % b); // 输出1
常见的比较运算符包括相等(== )不相等(!=)全等(=== )不全等(!==)大于(>)小于(<)大于等于(>=)和小于等于(<=)
var a = 10;
var b = "10";
console.log(a == b); // 输出true,因为会进行类型转换
console.log(a === b); // 输出false,因为不会进行类型转换
console.log(a != b); // 输出false
console.log(a !== b); // 输出true
console.log(a > b); // 输出false
console.log(a < b); // 输出false
console.log(a >= b); // 输出true
console.log(a <= b); // 输出true
常见的逻辑运算符包括与(&&)、或(||)和非(!)。
var a = 10;
var b = 3;
var c = 5;
console.log(a > b && b > c); // 输出false 同真才真
console.log(a > b || b > c); // 输出true 有真则真
console.log(!(a > b)); // 输出false 取反
还支持自增(++)和自减(–)运算符。 这些运算符可以放在变量前面或后面,分别表示先运算再赋值和先赋值再运算。
var a = 10;
a++; // 等价于 a = a + 1;
console.log(a); // 输出11
var b = 10;
++b; // 等价于 b = b + 1;
console.log(b); // 输出11
数据类型主要包括基本数据类型和引用数据类型两种。
- 基本数据类型包括数字(Number)、字符串(String)、布尔值(Boolean)、空值(Null)和未定义(Undefined)
- 引用数据类型包括对象(Object)、数组(Array)、函数(Function)等。
var a = 10; // 整数
var b = 3.14; // 浮点数
除了普通的数值之外,JavaScript还提供了一些特殊的数值,如NaN、Infinity和-Infinity。NaN代表“不是一个数”,Infinity代表正无穷大,-Infinity代表负无穷大。
console.log(1 / 0); // 输出Infinity
console.log(-1 / 0); // 输出-Infinity
console.log("abc" / 2); // 输出NaN
字符串用于表示文本。字符串可以使用单引号(')、双引号(")或反引号(`)来定义。
var str1 = 'hello';
var str2 = "world";
JavaScript中的字符串也支持一些常见的操作,如截取子字符串、查找子字符串、替换子字符串等。例如:
var str = "hello world";
console.log(str.substring(0, 5)); // 输出"hello"
console.log(str.indexOf("world")); // 输出6
console.log(str.replace("world", "JavaScript")); // 输出"hello JavaScript"
布尔值用于表示真或假。布尔值只有两个取值:true和false。
var a = true;
var b = false;
var a = null; // 空值
var b; // 未定义
由花括号({})包围的键值对集合。 每个键值对包含一个键和一个值,用冒号分隔。
键必须是一个字符串或一个符号(Symbol),而值可以是任何数据类型, 包括基本数据类型和其他引用数据类型。
let person = {
name: "John",
age: 30,
isStudent: true,
address: {
street: "123 Main St",
city: "Anytown",
state: "CA"
}
};
在上面的例子中,person 对象有四个属性:name、age、isStudent 和 address。其中 name、age 和 isStudent 的值都是基本数据类型,而 address 的值是一个嵌套对象。
在 JavaScript 中,可以使用点符号(.)或方括号([])来访问对象的属性。
console.log(person.name); // "John"
console.log(person["age"]); // 30
console.log(person.address.city); // "Anytown"
使用点符号访问属性时,属性名必须是一个有效的标识符。如果属性名包含特殊字符(比如空格、连字符或关键字),则需要使用方括号来访问该属性。
可以使用方括号访问属性时,可以将属性名包含在引号中,也可以不加引号。如果属性名是一个变量,则必须使用方括号访问该属性。
let propertyName = "name";
console.log(person[propertyName]); // "John"
JavaScript 中的对象可以使用构造函数(Constructor)来创建。构造函数是一种特殊的函数,它用于创建新的对象并初始化其属性和方法。构造函数中的关键字 this 表示当前正在创建的对象。
function Person(name, age) {
this.name = name;
this.age = age;
}
Person.prototype.sayHello = function() {
console.log("Hello, my name is " + this.name);
};
let john = new Person("John", 18);
console.log(john.name); // "John"
john.sayHello(); // "Hello, my name is John"
我们定义了一个名为 Person 的构造函数,它包含两个参数 name 和 age。我们还在 Person.prototype 上定义了一个方法 sayHello。最后,我们使用 new 关键字来创建一个新的 Person 对象,并将其赋值给 john 变量。
JavaScript 中的对象可以使用 for…in 循环来进行遍历。这个循环将枚举对象的所有可枚举属性(包括继承来的属性)。
使用function关键字定义函数,可以接受参数,并且可以返回值。函数是JavaScript的核心语法之一,也是封装和复用代码的重要手段。
函数声明和函数表达式。
函数声明使用 function 关键字来定义,它需要一个函数名和一组参数。
function add(x, y) {
return x + y;
}
函数表达式是通过将函数定义为表达式赋值给变量而创建的。
var add = function(x, y) {
return x + y;
};
无论是函数声明还是函数表达式,都可以通过函数名来调用函数,并将参数传递到该函数中。
console.log(add(2, 3)); // 输出 5
匿名函数
它们没有名称。匿名函数通常用作回调函数或立即执行函数(IIFE)。回调函数是在异步编程中经常使用的一种技术,它允许将函数传递给另一个函数,并在后者完成后自动调用它。
setTimeout() 方法接受一个匿名函数作为第一个参数,该函数将在一秒钟后被调用:
setTimeout(function() {
console.log('Hello, world!');
}, 1000);
JavaScript中创建数组的方式有两种:使用字面量创建和使用Array对象创建。
使用字面量创建数组是最常见的方式。可以使用方括号“[]”来创建一个新的数组,例如:
var arr = [1, 2, 3];//创建了一个具有三个元素的数组。在数组中,每个元素都有一个唯一的数字索引,它们以0为起始值,依次递增。数组的第一个元素的索引是0,第二个是1,依此类推。
var arr = new Array(1, 2, 3);//与使用字面量创建数组的效果相同。如果只给Array构造函数传递一个参数,则该参数将被视为数组的长度,而不是数组的值。
var arr = new Array(3);
console.log(arr.length); // 输出3
创建了一个长度为3的空数组。但是,该数组并没有包含任何元素,它的每个元素都是undefined。
在JavaScript中,可以使用方括号来访问数组中的元素。
var arr = [1, 2, 3];
console.log(arr[0]); // 输出1
可以通过索引来修改和添加数组中的元素。
var arr = [1, 2, 3];
arr[1] = 4; // 修改第二个元素的值
console.log(arr); // 输出[1, 4, 3]
arr[3] = 5; // 添加一个新的元素
console.log(arr); // 输出[1, 4, 3, 5]
在数组中添加新元素时,如果指定的索引大于数组当前长度,则会自动将数组长度调整为索引加1的大小。
可以使用delete关键字来删除数组中的元素
var arr = [1, 2, 3];
delete arr[1]; // 删除第二个元素
console.log(arr); // 输出[1, undefined, 3]
使用delete关键字删除数组元素时,并不会改变数组的长度。而是将要删除的元素的值设置为undefined。
如果想要删除数组中的某个元素并将其从数组中完全移除,可以使用splice()方法。
var arr = [1, 2, 3];
arr.splice(1, 1); // 从索引1开始,删除一个元素
console.log(arr); // 输出[1, 3]
这里从索引1处开始,删除一个元素,然后输出了修改后的数组。splice()方法还可以用来插入新元素、替换已有元素等操作。
var arr = [1, 2, 3];
arr.push(4); // 在数组末尾添加一个元素4
console.log(arr); // 输出[1, 2, 3, 4]
arr.pop(); // 删除数组末尾的元素
console.log(arr); // 输出[1, 2, 3]
var arr = [1, 2, 3];
arr.unshift(0); // 在数组开头添加一个元素0
console.log(arr); // 输出[0, 1, 2, 3]
arr.shift(); // 删除数组开头的元素
console.log(arr); // 输出[1, 2, 3]
var arr = [1, 2, 3];
var str = arr.join("-"); // 将数组中的元素以"-"分隔符连接成一个字符串
console.log(str); // 输出"1-2-3"
var arr = [1, 2, 3, 4, 5];
var subArr = arr.slice(1, 3); // 返回索引1到索引3之间的子数组,不包括索引3
console.log(subArr); // 输出[2, 3]
console.log(arr); // 输出[1, 2, 3, 4, 5]
var arr = [3, 2, 1];
arr.sort(); // 对数组进行升序排列
console.log(arr); // 输出[1, 2, 3]
需要注意的是,sort()方法默认按照字母顺序对数组元素进行排序。如果需要按照数值大小进行排序,可以传递一个比较函数作为参数。
JavaScript中也可以创建多维数组,即数组中的元素也是数组。使用多个方括号来指定各个维度的索引。
var arr = [[1, 2], [3, 4]];
console.log(arr[0][1]); // 输出2
- 在回调函数中,我们将需要等待的代码放在一个函数中,并把该函数作为参数传递给另一个函数。
- Promise 对象表示一个异步操作的最终完成或失败,并提供了一些方法来处理该操作的结果。我们可以通过 Promise 的 then 和 catch 方法来注册回调函数,当异步操作完成时,Promise 会自动调用对应的回调函数。
- async/await 让异步代码看起来更像同步代码,让程序员能够更加容易地编写和理解异步代码。
使用//或/**/来添加注释,增加代码的可读性和可维护性。
在 for 循环结束后,变量 i 的值为 3。第四个定时器的回调函数中的 i 值为 3。然而,由于第四个定时器在执行前被清除了,所以它的回调函数没有机会执行。所以答案为012
也许把它换成立即执行函数就能实现0123了?()
ps:
1.浏览器会按代码顺序解析html文档 所以js一般写在body里更合适
-textarea 高度自适应
在这里插入代码片
` +$ 可以在避免输入多个“”
tc由var 改成let
回传参数加tc