当前位置: 首页 > article >正文

2024 JavaScript 入门教程:语法、算法与重要知识点详解

一、JavaScript 是什么

JavaScript 是一种高级编程语言,主要用于网页开发。它能在浏览器中运行,为网页添加交互性、动态效果和验证功能。此外,它还可在服务器端(如 Node.js)、桌面应用程序和移动应用程序中使用。

二、JavaScript 的基本语法

(一)变量声明

使用 varlet 或 const 关键字声明变量。

  • var 声明的变量有变量提升现象,let 和 const 则无。
  • const 声明的变量是常量,一旦赋值后不能再被修改。
var name = "John";
let age = 25;
const PI = 3.14;

(二)数据类型

JavaScript 有七种基本数据类型:numberstringbooleannullundefinedsymbol 和 bigint。还有对象类型,如 ObjectArray 和 Function

let num = 10; // number
let str = "Hello"; // string
let isTrue = true; // boolean
let nothing = null;
let notDefined; // undefined
let sym = Symbol(); // symbol
let bigNum = 10n; // bigint

let obj = { name: "John", age: 25 }; // object
let arr = [1, 2, 3]; // array
let func = function() { return "Hello"; }; // function

(三)运算符

  • 算术运算符:+-*/% 等。
  • 比较运算符:=====!=!==<><=>= 等。
  • 逻辑运算符:&&(与)、||(或)、!(非)。
  • 赋值运算符:=+=-=*=/= 等。
let a = 10;
let b = 5;
console.log(a + b); // 15
console.log(a == b); // false
console.log(a > b && b < 10); // true
a += b; // a = a + b; a is now 15

(四)控制流语句

  • 条件语句:ifelse ifelse
  • 循环语句:forwhiledo-while
let num = 10;
if (num > 5) {
  console.log("Number is greater than 5");
} else if (num < 5) {
  console.log("Number is less than 5");
} else {
  console.log("Number is equal to 5");
}

for (let i = 0; i < 5; i++) {
  console.log(i);
}

(五)函数

使用 function 关键字定义函数。函数可接受参数,并返回一个值。

function add(a, b) {
  return a + b;
}
console.log(add(10, 5)); // 15

三、JavaScript 的对象和数组

(一)对象

对象是一组属性和方法的集合。可使用对象字面量或构造函数创建对象。

let person = {
  name: "John",
  age: 25,
  sayHello: function() {
    console.log("Hello!");
  }
};
console.log(person.name); // John
person.sayHello(); // Hello!

let anotherPerson = new Object();
anotherPerson.name = "Jane";
anotherPerson.age = 30;

(二)数组

数组是一组有序的值的集合。可使用数组字面量或构造函数创建数组。

let arr = [1, 2, 3];
console.log(arr[0]); // 1

let anotherArr = new Array(4, 5, 6);
console.log(anotherArr.length); // 3

四、JavaScript 的事件处理

(一)事件

事件是浏览器或用户在网页上执行的操作,如点击、鼠标移动、键盘输入等。

(二)事件处理程序

事件处理程序是一个函数,当特定事件发生时被调用。可使用 addEventListener 方法或在 HTML 元素的属性中指定事件处理程序。

<button id="myButton">Click me</button>
<script>
  document.getElementById("myButton").addEventListener("click", function() {
    console.log("Button clicked!");
  });
</script>

五、JavaScript 的巧妙用法

(一)立即执行函数表达式(IIFE)

定义后立即执行的函数。可用于创建局部作用域,避免变量污染全局作用域。

(function() {
  let privateVariable = "This is a private variable";
  console.log(privateVariable);
})();
// 输出:This is a private variable
console.log(privateVariable); // 报错,privateVariable 未定义

(二)函数柯里化

将多参数函数转换为一系列单参数函数的技术,使函数更加灵活和可复用。

function add(a) {
  return function(b) {
    return a + b;
  };
}
let addFive = add(5);
console.log(addFive(3)); // 8

(三)数组方法的巧妙运用

mapfilter 和 reduce 等数组方法可使数组操作更简洁高效。

let numbers = [1, 2, 3, 4, 5];
let doubledNumbers = numbers.map(function(num) {
  return num * 2;
});
console.log(doubledNumbers); // [2, 4, 6, 8, 10]

let evenNumbers = numbers.filter(function(num) {
  return num % 2 === 0;
});
console.log(evenNumbers); // [2, 4]

let sum = numbers.reduce(function(acc, num) {
  return acc + num;
}, 0);
console.log(sum); // 15

(四)利用解构赋值简化代码

可从数组或对象中提取值,并将其赋给变量。

let [a, b] = [1, 2];
console.log(a); // 1
console.log(b); // 2

let { name, age } = { name: "John", age: 25 };
console.log(name); // John
console.log(age); // 25

六、JavaScript 常用的方法

1.toString():将一个值转换为字符串。

   let num = 10;
   console.log(num.toString()); // "10"

2.toFixed():将一个数字格式化为指定小数位数的字符串。

   let num = 10.12345;
   console.log(num.toFixed(2)); // "10.12"

3.split():将一个字符串分割成数组。

   let str = "Hello,World";
   console.log(str.split(",")); // ["Hello", "World"]

4.join():将一个数组的元素连接成一个字符串。

   let arr = ["Hello", "World"];
   console.log(arr.join(" ")); // "Hello World"

5.push() 和 pop()

  • push() 方法将一个或多个元素添加到数组的末尾,并返回新的数组长度。
  • pop() 方法从数组中删除最后一个元素,并返回该元素。
   let arr = [1, 2, 3];
   arr.push(4);
   console.log(arr); // [1, 2, 3, 4]
   console.log(arr.pop()); // 4
   console.log(arr); // [1, 2, 3]

6.unshift() 和 shift()

  • unshift() 方法将一个或多个元素添加到数组的开头,并返回新的数组长度。
  • shift() 方法从数组中删除第一个元素,并返回该元素。
   let arr = [1, 2, 3];
   arr.unshift(0);
   console.log(arr); // [0, 1, 2, 3]
   console.log(arr.shift()); // 0
   console.log(arr); // [1, 2, 3]

7.slice():从一个数组中提取一部分元素,并返回一个新的数组。

   let arr = [1, 2, 3, 4, 5];
   console.log(arr.slice(1, 4)); // [2, 3, 4]

8.splice():可以在数组中添加、删除或替换元素。

   let arr = [1, 2, 3, 4, 5];
   arr.splice(2, 1, 6);
   console.log(arr); // [1, 2, 6, 4, 5]

9.indexOf() 和 lastIndexOf()

  • indexOf() 方法返回在数组中首次出现的指定元素的索引,如果不存在则返回 -1。
  • lastIndexOf() 方法返回在数组中最后一次出现的指定元素的索引,如果不存在则返回 -1。
   let arr = [1, 2, 3, 2, 1];
   console.log(arr.indexOf(2)); // 1
   console.log(arr.lastIndexOf(2)); // 3

10.forEach():对数组的每个元素执行一个回调函数。

   let arr = [1, 2, 3];
   arr.forEach(function(num) {
     console.log(num);
   });
   // 输出:1、2、3

七、常见的 JavaScript 算法题

(一)求数组中的最大值

给定一个整数数组,找出其中的最大值。

function findMax(arr) {
  let max = arr[0];
  for (let i = 1; i < arr.length; i++) {
    if (arr[i] > max) {
      max = arr[i];
    }
  }
  return max;
}
console.log(findMax([5, 8, 3, 10, 2])); // 10

(二)判断回文数

给定一个整数,判断它是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

function isPalindrome(x) {
  if (x < 0) return false;
  let reversed = 0;
  let original = x;
  while (x > 0) {
    reversed = reversed * 10 + x % 10;
    x = Math.floor(x / 10);
  }
  return reversed === original;
}
console.log(isPalindrome(121)); // true
console.log(isPalindrome(-121)); // false

(三)冒泡排序

实现冒泡排序算法,对给定的整数数组进行升序排序。

function bubbleSort(arr) {
  const n = arr.length;
  for (let i = 0; i < n - 1; i++) {
    for (let j = 0; j < n - i - 1; j++) {
      if (arr[j] > arr[j + 1]) {
        // 交换元素
        let temp = arr[j];
        arr[j] = arr[j + 1];
        arr[j + 1] = temp;
      }
    }
  }
  return arr;
}
console.log(bubbleSort([5, 3, 8, 4, 2])); // [2, 3, 4, 5, 8]

(四)斐波那契数列

实现一个函数,返回斐波那契数列的第 n 项。斐波那契数列的定义为:F (0)=0,F (1)=1,F (n)=F (n - 1)+F (n - 2)(n≥2,n∈N*)。

function fibonacci(n) {
  if (n <= 1) return n;
  let a = 0;
  let b = 1;
  for (let i = 2; i <= n; i++) {
    let temp = a + b;
    a = b;
    b = temp;
  }
  return b;
}
console.log(fibonacci(6)); // 8

八、JavaScript 重要知识点拓展

(一)原型与原型链

在 JavaScript 中,每个对象都有一个 __proto__ 属性,它指向该对象的原型对象。而原型对象自身也有原型,如此便形成了原型链。通过原型链,对象能够访问到其原型对象上的属性和方法。

function Person() {}
Person.prototype.sayHello = function() {
  console.log("Hello!");
};
let person = new Person();
person.sayHello(); // Hello!

(二)闭包

闭包是指有权访问另一个函数作用域中的变量的函数。它使得函数可以访问其外部函数的变量,即使外部函数已经执行完毕。

function outerFunction() {
  let outerVariable = "I am an outer variable";
  function innerFunction() {
    console.log(outerVariable);
  }
  return innerFunction;
}
let closure = outerFunction();
closure(); // I am an outer variable

(三)异步编程

JavaScript 是单线程语言,但可以通过异步编程来处理耗时的操作,比如网络请求、文件读取等。异步编程可以通过回调函数、Promise 和 async/await 等方式来实现。

function fetchData(callback) {
  setTimeout(function() {
    callback("Data fetched!");
  }, 2000);
}
fetchData(function(data) {
  console.log(data);
});
function fetchData() {
  return new Promise(function(resolve, reject) {
    setTimeout(function() {
      resolve("Data fetched!");
    }, 2000);
  });
}
fetchData().then(function(data) {
  console.log(data);
});
async function fetchData() {
  await new Promise(function(resolve) {
    setTimeout(resolve, 2000);
  });
  return "Data fetched!";
}
fetchData().then(function(data) {
  console.log(data);
});

九、JavaScript 的 DOM 操作

(一)DOM(Document Object Model)

用于表示和操作 HTML 和 XML 文档的标准编程接口。JavaScript 可以通过 DOM 来访问和修改网页的内容、结构和样式。

(二)访问 DOM 元素

使用 document.getElementByIddocument.getElementsByTagNamedocument.getElementsByClassName 等方法来访问特定的 DOM 元素。

let element = document.getElementById("myElement");
let elements = document.getElementsByTagName("div");
let classElements = document.getElementsByClassName("myClass");

(三)修改 DOM 元素

可以修改 DOM 元素的内容、属性和样式。

let element = document.getElementById("myElement");
element.innerHTML = "New content";
element.setAttribute("class", "newClass");
element.style.color = "red";

十、总结

本文全面介绍了 JavaScript 的基础知识,包括基本语法、对象和数组、事件处理、巧妙用法、常用方法、练习题、常见算法题、知识点补充以及 DOM 操作。通过学习这些内容,可开始使用 JavaScript 开发简单的网页应用程序。随着学习的深入,还可探索更多高级的 JavaScript 特性和框架,提高开发效率和技能水平。

希望这个入门教程对你有所帮助!如有问题或建议,请随时在评论区留言。


http://www.kler.cn/news/364866.html

相关文章:

  • 数字图像处理的概念(一)
  • 京准电钟解读:NTP网络对时服务器助力厂区改造方案
  • react18中的函数组件底层渲染原理分析
  • Java老鸟前端小白uniapp+uview开发小程序第2天
  • qt项目使用其他项目的ui之单继承之成员变量
  • vue开发的一个小插件vue.js devtools
  • 查看linux的版本
  • 电影评论网站开发:Spring Boot技术指南
  • K最近邻算法
  • TinTin Web3 动态精选:Vitalik 探讨以太坊协议,Solana ETN 开启质押功能
  • 数造科技荣获2024DAMA中国“数据治理创新奖”
  • Lua repeat-until循环
  • UEFI BIOSAPP编程开发查询手册.pdf
  • 最后一周征稿!第四届计算机、物联网与控制工程国际学术会议(CITCE 2024)
  • 中国游戏产业趋势是什么?附2024趋势以及潜力分析报告
  • 如何使用JMeter进行性能测试的保姆级教程
  • Mac安装 TIDB并启动集群
  • sqlite数据库数据迁移到mysql
  • Hallo 2:通过单张图像与音频生成1小时4K分辨率人像视频的人工智能技术解析
  • 陪诊小程序之uniapp(从入门到精通)
  • Web组态软件
  • 用js+css实现圆环型的进度条——js+css基础积累
  • 信息安全工程师(68)可信计算技术与应用
  • 线性可分支持向量机的原理推导 9-27拉格朗日乘子和不等式约束关系 公式解析
  • 《计算机网络网络层:连接虚拟世界的关键桥梁》
  • 国产标准数字隔离器的未来---克里雅半导体