前端之“JavaScript:前端开发的核心语言及其在网页交互与动态功能实现中的关键作用“第一天

前端之“JavaScript:前端开发的核心语言及其在网页交互与动态功能实现中的关键作用“第一天

        上几篇博客我们介绍的是HTML和css,从这里开始我们介绍javascript

JavaScript(简称JS)是一种高级的、面向对象的编程语言,主要用于前端开发。它是一种动态类型、弱类型的语言,可以在网页上实现交互效果、动态更新网页内容、处理用户输入等。JavaScript是最常用的编程语言之一,几乎每个网站都使用JavaScript来增强用户体验和功能。

1.JavaScript的特点包括:

  1. 与HTML和CSS结合:JavaScript可以直接与HTML和CSS进行交互,使网页具有更强的交互性和动态性。
  2. 客户端脚本语言:JavaScript主要运行在客户端,即用户的浏览器中,可以直接在用户的计算机上执行,减轻了服务器的负担。
  3. 强大的功能:JavaScript具有丰富的内置功能和对象,可以处理日期、字符串、数组等数据类型,以及操作DOM元素、发送HTTP请求等。
  4. 支持面向对象编程:JavaScript支持面向对象的编程范式,可以创建和使用对象、继承和多态等。
  5. 平台无关性:JavaScript可以在多个操作系统和浏览器上运行,不受平台限制。

2.JavaScript在前端开发中的应用非常广泛,可以实现以下功能:

  1. 动态内容:JavaScript可以根据用户的操作或事件,动态改变网页的内容和样式。

  2. 表单验证:JavaScript可以对用户输入的表单进行验证,如验证用户名、密码等格式是否合法。
  3. 数据交互:JavaScript可以通过AJAX技术与后端服务器进行数据交互,实现无需刷新页面的动态加载和更新。
  4. 动画效果:JavaScript可以实现各种动画效果,如滑动、淡入淡出、旋转等,增加网页的视觉吸引力。
  5. 响应式布局:JavaScript可以根据不同的屏幕尺寸和设备类型,实现页面的自适应和响应式布局。

总之,JavaScript是一门重要的前端开发语言,具有丰富的功能和广泛的应用范围,掌握好JavaScript可以为网页增加更多的交互性和动态性。

3-JS之Hello

js的三种书写方式

<!DOCTYPE html>
<html lang="en">
<head>
    <!-- 定义文档类型、编码和视口 -->
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <!-- 设置网页标题 -->
    <title>Document</title>

    <!-- 在head标签内直接嵌入JavaScript代码段 -->
    <script>
      // 使用alert函数在页面弹出一个警告框显示消息
      // alert("hello world");

      // document.write方法用于向文档中写入HTML内容,但在这里使用会导致原有DOM结构被替换
      // document.write("hello world");
      
      // console.log是JavaScript的内置方法,用于在浏览器开发者工具控制台输出信息,不会改变页面内容
      console.log("hello world");
    </script>
</head>
<body>
    <!-- 创建一个div元素,并显示文本内容 -->
    <div>hello 11111</div>
</body>
</html>

在这段HTML代码中,我为每一部分添加了注释来解释其作用。<script>标签内的JavaScript代码片段包含了三种不同的输出方式:alert()用于向用户显示警告对话框;document.write()可以向文档流中写入内容,但通常不推荐在动态DOM操作时使用,因为它会覆盖现有文档流;而console.log()则是在开发者控制台打印调试信息,对实际页面渲染无影响。 

4-JS的书写位置

01-行内

在HTML中,JavaScript的行内书写方式是指直接将JavaScript代码写在HTML标签的事件属性中。例如,在一个按钮元素上添加点击事件处理函数:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>JS行内事件处理示例</title>
</head>
<body>

<button onclick="alert('Hello World!')">点击我</button>

<!-- 在这里,JavaScript代码 "alert('Hello World!')" 被写在了HTML按钮元素的onclick属性内 -->
<!-- 当用户点击此按钮时,会触发JavaScript的alert对话框显示消息 -->

</body>
</html>

在这个例子中,onclick 是一个HTML事件属性,当它所关联的元素(这里是 button)被点击时,会执行对应的 JavaScript 代码。此处我们使用的是 alert() 函数来弹出一个警告框显示“Hello World!”的消息。这就是JavaScript行内书写的简单应用实例。虽然这种形式方便快速实现简单的交互效果,但不利于代码复用和维护,因此在现代前端开发中不推荐大量使用这种方式编写JavaScript代码。 

02-内嵌

JavaScript的内嵌书写位置是指将JavaScript代码写在HTML文档 <script> 标签内部,但不是直接放在HTML元素的事件属性中。以下是一个内嵌式JavaScript代码的例子:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>JS内嵌书写示例</title>
</head>
<body>

<h1 id="greeting">欢迎来到我的网站!</h1>

<script>
// JavaScript内嵌代码开始
document.getElementById('greeting').textContent = '你好,世界!';

// 定义一个函数
function displayTime() {
  var now = new Date();
  var time = now.getHours() + ':' + now.getMinutes();
  document.getElementById('current-time').textContent = '当前时间:' + time;
}

// 当页面加载完成时调用displayTime函数
window.onload = displayTime;
</script>

<p id="current-time"></p>

<!-- JavaScript内嵌代码结束 -->

</body>
</html>

在这个例子中,我们有两个JavaScript内嵌片段:

  1. 直接修改了id为greeting<h1>标签的内容。
  2. 定义了一个displayTime函数,并将其设置为当整个页面加载完成后执行(通过window.onload事件);这个函数获取当前时间并将其显示在id为current-time<p>标签中。

通过这种方式,JavaScript代码可以与HTML文档结构更好地分离,同时又不需要外部文件引用,方便初学者理解和调试。然而,对于大型项目,推荐使用外部脚本文件来组织和管理JavaScript代码,以提高代码可维护性和复用性。

03-外部

JavaScript的外部书写位置是指将JavaScript代码写在一个单独的文件中,然后通过HTML文档中的<script>标签引用该文件。这种方式可以更好地组织和管理代码,并且能够实现代码复用。以下是一个使用外部JS文件的例子:

首先,在一个名为script.js的外部文件中编写JavaScript代码:

// script.js 文件内容
document.addEventListener('DOMContentLoaded', function() {
  var greeting = document.getElementById('greeting');
  greeting.textContent = '你好,世界!';

  // 定义一个函数
  function displayTime() {
    var now = new Date();
    var time = now.getHours() + ':' + now.getMinutes();
    document.getElementById('current-time').textContent = '当前时间:' + time;
  }

  // 当DOM加载完成后调用displayTime函数
  displayTime();
});

接下来,在HTML文档中引用这个外部JS文件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>JS外部书写示例</title>
</head>
<body>

<h1 id="greeting">欢迎来到我的网站!</h1>

<p id="current-time"></p>

<!-- 引入外部JS文件 -->
<script src="script.js"></script>

</body>
</html>

 在这个例子中,当浏览器解析到<script src="script.js"></script>标签时,它会暂停HTML解析流程,请求并执行指定URL(即script.js)中的JavaScript代码。在外部文件script.js被下载并执行后,它会找到对应的HTML元素并修改其内容或行为,从而实现了与页面交互的功能。

5-JS的注释与规范

JavaScript中的注释用于对代码进行解释和说明,以提高代码的可读性和维护性。JS中有两种类型的注释:单行注释和多行注释。

单行注释

// 这是一个单行注释,它会直到行尾结束
var greeting = "Hello, world!"; // 这是紧跟在语句后面的单行注释

// 注释规范建议:
// 1. 使用英文描述注释内容
// 2. 对复杂或不直观的代码块进行详细解释
// 3. 注释应简洁明了,避免冗余信息

多行注释

/*
   这是一个多行注释,
   它可以跨越多行。
   在这个区域内,你可以编写详细的文档字符串或者对一段代码进行解释。

   注释规范建议:
   - 对函数、类等结构使用多行注释来提供简短摘要和用法示例
   - 多行注释内保持良好的缩进,便于阅读
   - 避免在注释中留下未完成的注解或过时信息
*/

function greet(name) {
  console.log("Hello, " + name + "!"); // 函数作用:向控制台输出问候语
}

JSDoc风格注释(高级注释规范)

JSDoc是一种为JavaScript编写的注释标准,能够生成API文档。以下是一个JSDoc风格注释的例子:

/**
 * @function greet
 * @description 输出友好的问候语到控制台
 * @param {string} name - 要问候的人的名字
 */
function greet(name) {
  console.log("Hello, " + name + "!");
}

通过这样的注释方式,工具如jsdoc等可以根据注释自动生成API文档,帮助开发者更好地理解和使用代码。

6-JS的变量

在JavaScript中,变量用于存储数据。下面是一些不同类型的变量声明和使用的例子:

  1. 使用var声明变量(适用于ES5及更早版本):

    // 声明并初始化一个变量
    var myVariable = "Hello, World!";
    
    // 只声明变量,不初始化
    var anotherVar;
    
    // 后续赋值
    anotherVar = 42;
    
    console.log(myVariable); // 输出: Hello, World!
    console.log(anotherVar); // 输出: 42
  2. 使用let声明变量(适用于ES6及以上版本):

    // 声明并初始化一个块级作用域的变量
    let blockScopedVar = true;
    
    if (true) {
      let insideIfBlock = "This variable is only a***essible within this block.";
      console.log(insideIfBlock); // 输出: This variable is only a***essible within this block.
    }
    
    console.log(blockScopedVar); // 输出: true
    console.log(insideIfBlock); // 报错:因为insideIfBlock在此作用域外未定义
  3. 使用const声明常量(同样适用于ES6及以上版本):

    // 声明并初始化一个常量(不可重新赋值)
    const PI = 3.14159;
    
    // 尝试更改常量值会导致错误
    PI = 3; // TypeError: Assignment to constant variable.
    
    // 注意:虽然常量的值不能改变,但如果是引用类型的值(如对象或数组),其内部属性是可以修改的。
    const obj = { message: "I am a constant object." };
    obj.message = "But I can change my properties."; 
    console.log(obj); // 输出: {message: "But I can change my properties."}
    这些例子展示了如何在JavaScript中声明和使用变量,并体现了不同声明关键字带来的作用域和可变性差异。

**var声明变量**

- **优点**:
  - 在JavaScript的早期版本(ES5及以前)中,`var`是声明变量的唯一关键字,因此在老项目和旧浏览器中广泛使用。
  - `var`声明的变量具有函数作用域,在整个函数内部都是可访问的。

- **缺点**:
  - **变量提升(Hoisting)**:`var`声明的变量会被提升到所在作用域的顶部,这可能导致在变量声明之前就使用它而不会报错,从而引发意料之外的行为。
  - 不支持块级作用域:`var`声明的变量可以在其所在的函数作用域内的任何地方被访问,而不是像`let`那样仅限于当前块内可见。
  - 可重复声明:在同一作用域内可以多次使用`var`声明同一变量名,后面的声明会覆盖前面的值。

**let声明变量**

- **优点**:
  - 块级作用域:`let`声明的变量只在其所在的代码块或语句组内有效,有助于避免变量污染其他区域。
  - 没有变量提升:虽然`let`声明也会提升,但不能在声明之前使用,否则会导致“暂时性死区”错误(Temporal Dead Zone, TDZ)。
  - 避免重复声明:在同一个作用域内,不允许使用`let`重复声明同名变量。

- **缺点**:
  - 对于习惯于`var`的老开发者来说,需要适应新的作用域规则,尤其是在处理循环、条件判断等场景时,需要注意变量的作用域不再绑定到函数而是块级。
  - 相对于`var`,`let`不是所有环境都支持,但在现代浏览器和Node.js环境中已经是标配。

**const声明常量**

- **优点**:
  - 定义不可变的值:`const`用于声明一个常量,一旦声明后就不能重新赋值,这对于防止意外修改重要的值非常有用。
  - 同样具有块级作用域:与`let`相同,`const`声明的变量也具有块级作用域特性。
  
- **缺点**:
  - 如果你试图重新赋值给用`const`声明的变量,JavaScript将会抛出错误,所以必须确保初始化时就提供正确的值。
  - 虽然`const`所指向的对象或数组的内容是可以改变的(如果它们是可变对象),但是不能改变这个变量所指向的引用地址。这意味着用`const`声明的数组或对象仍然是可变的,只是不能重新分配给另一个不同的对象或数组。

总结起来,`let`和`const`在ES6之后引入,提供了更严格的变量管理机制,并且鼓励更好的编程实践。推荐尽可能地使用`let`和`const`来代替`var`,以减少潜在的副作用和增强代码可读性。

7-变量命名的规则和规范

在JavaScript中,变量命名应遵循以下规则和规范:

1. **字符要求**:


   - 变量名必须以字母、下划线(_)或美元符号($)开始。
   - 其余部分可以包含字母、数字、下划线或美元符号。
   - 不允许使用JavaScript保留关键字作为变量名。

2. **大小写敏感**:


   - JavaScript是大小写敏感的,这意味着`myVariable`与`myvariable`被视为两个不同的变量。

3. **驼峰命名法(CamelCase)**:


   - 在JavaScript中,推荐使用驼峰命名法为变量命名,即第一个单词首字母小写,后续单词首字母大写。例如:


     var myVariableName;
     let camelCaseExample;
     const thisIsAConstant = "Value";
     

4. **帕斯卡命名法(PascalCase)**:

- 类名通常采用帕斯卡命名法,即每个单词首字母都大写。例如:

class PascalCaseExample {
       constructor() {
         // ...
       }
     }

5. **短横线命名法(kebab-case 或 snake_case)**:

         - 虽然JavaScript标准并不强制使用这种命名方式,但在某些场景如CSS类名或者常用于模块化编程时,可能会见到短横线命名(kebab-case)或下划线命名(snake_case)。不过,在编写JavaScript变量名时不建议使用这种方式。

示例代码:

// 驼峰命名法的例子
let studentName; // 学生姓名
const totalScore; // 总分数

// 帕斯卡命名法的例子(适用于类)
class StudentRecord {
  constructor(studentName, totalScore) {
    this.studentName = studentName;
    this.totalScore = totalScore;
  }
}
// 不符合规范的变量名
var 1name; // 错误:不能以数字开头
var if; // 错误:if是JavaScript的关键字

请注意,除了遵循这些基本规则外,一个好的变量名还应当简洁明了且具有描述性,能够清晰地表明该变量所代表的数据含义。

8-数据类型

在JavaScript中,有多种数据类型。下面是一些常见数据类型的例子:

1. **基本数据类型(Primitive Types)**


   - **Number**(数字):
 
     let age = 25; // 整数
     let pi = 3.14; // 浮点数
   - **String**(字符串):
 let name = "Alice"; 
     let greeting = 'Hello, ' + name;

   - **Boolean**(布尔值):

     let isStudent = true;
     let hasGraduated = false;
     ```

   - **Null**(空值):
     ```javascript
     let emptyValue = null;
    
   - **Undefined**(未定义):
    let uninitializedVar; // 默认为undefined
   - **Symbol**(符号)(ES6新增):
   let uniqueKey = Symbol("key");

2. **复合数据类型(Non-Primitive Types)**


   - **Object**(对象):
     let person = {
       name: "Bob",
       age: 30,
       city: "New York"
     };
   - **Array**(数组):
  let numbersList = [1, 2, 3, 4, 5];
     let mixedArray = ["apple", true, 42, {name: "Alice"}];
   - **Function**(函数):
function greet(name) {
       console.log("Hello, " + name);
     }

注意:虽然函数也是一种对象,但在JavaScript中通常视为一种独立的数据类型。另外,在ES6中引入了`let`和`const`关键字用于声明变量,并且在处理变量作用域时提供了更精确的控制。例如:

let mutableVariable = 10; // 可变的
mutableVariable = 20;

const immutableVariable = "Immutable Value"; // 不可变的
// immutableVariable = "Changed Value"; // 这将导致错误,因为试图重新赋值给常量

9-检测数据类型

在JavaScript中,有多种方法可以检测数据类型。下面是一些示例:

1. **使用 `typeof` 操作符**:

   let value = "Hello";
   
   // 检测字符串类型
   if (typeof value === 'string') {
     console.log('Value is a string.');
   }

   value = 42;

   // 检测数字类型
   if (typeof value === 'number') {
     console.log('Value is a number.');
   }
 

2. **使用 `instanceof` 关键字**:


   let array = [1, 2, 3];

   // 检测数组类型
   if (array instanceof Array) {
     console.log('Value is an array.');
   }

   let dateObj = new Date();

   // 检测Date对象类型
   if (dateObj instanceof Date) {
     console.log('Value is a Date object.');
   }

3. **使用 `Object.prototype.toString.call()` 方法**:

let obj = {name: 'John'};

   // 更通用的检测对象类型(包括内置类型和自定义类型)
   function getType(value) {
     return Object.prototype.toString.call(value).slice(8, -1);
   }

   if (getType(obj) === 'Object') {
     console.log('Value is an object.');
   }

   let func = function() {};

   if (getType(func) === 'Function') {
     console.log('Value is a function.');
   }

4. **ES6中的 `Array.isArray()` 函数**:

 let arr = [1, 2, 3];

   // 特别针对数组类型的检测
   if (Array.isArray(arr)) {
     console.log('Value is an array.');
   }

5. **对于特殊的值如 null 和 undefined 的检查**:


   let value = null;

   if (value === null) {
     console.log('Value is null.');
   }

   value = undefined;

   if (typeof value === 'undefined') {
     console.log('Value is undefined.');
   }

10-数据类型转换-转数值

在JavaScript中,有几种方式可以将非数值类型的值转换为数值类型。以下是一些例子:

1. **使用 `Number()` 函数**:

   let stringNum = "42";
   let convertedNum = Number(stringNum);

   console.log(convertedNum); // 输出:42

2. **隐式转换(加号操作符)**:

  let str = "3.14";
   let num = str + 0; 

   console.log(num); // 输出:3.14

3. **`parseInt()` 和 `parseFloat()` 函数**:

   - `parseInt` 只处理整数部分,并忽略小数点及其后的数字,如果字符串不能被解析为整数,则返回NaN。
   - `parseFloat` 则会解析整个浮点数。

 let intStr = "42";
   let parsedInt = parseInt(intStr, 10); // 第二个参数是进制,默认是10

   console.log(parsedInt); // 输出:42
   
   let floatStr = "3.14";
   let parsedFloat = parseFloat(floatStr);

   console.log(parsedFloat); // 输出:3.14


4. **一元运算符 `+`**:

  let mixedStr = "42 apples";
   let coercedNum = +mixedStr;

   console.log(coercedNum); // 输出:42 (尝试转换为数字,由于"apples"不是数字,所以只转换了"42")

注意:`Number()` 函数和一元加法运算符 `+` 在处理无法转换为数字的字符串时,如空字符串、纯文本字符串或含有非数字字符的字符串,它们都会返回 `NaN`(Not a Number)。

11-数据类型转换-转字符串

在JavaScript中,将非字符串类型的值转换为字符串类型可以使用以下几种方法:

1. **使用 `String()` 函数**:


   let num = 42;
   let strNum = String(num);

   console.log(strNum); // 输出:"42"


  2. **隐式转换(加号操作符)**:

 let num = 3.14;
   let strNum = num + ""; 

   console.log(strNum); // 输出:"3.14"


3. **模板字面量(Template literals)**:


   let boolValue = true;
   let strBool = `${boolValue}`;

   console.log(strBool); // 输出:"true"


 4. **`.toString()` 方法**:
 

javascript
   let num = 100;
   let strNum = num.toString();

   console.log(strNum); // 输出:"100"


   5. **对于对象而言,调用 `.toString()` 可能返回 `[object Object]`,如果需要更具体的字符串表示,可能需要调用特定的属性或方法**:

  let dateObj = new Date();
   let dateString = dateObj.toString();

   console.log(dateString); // 输出:当前日期时间的字符串形式,如 "Tue Feb 07 2023 13:30:00 GMT+0800 (China Standard Time)"

以上都是将数值、布尔值和日期等类型转换为字符串的例子。

12-数据类型转换-转布尔

在JavaScript中,将其他类型转换为布尔值通常发生在条件判断、逻辑运算符(如 `if` 语句)或者使用 `Boolean()` 函数时。以下是一些例子:

1. **使用 `Boolean()` 函数**:


   let value1 = "Hello";
   let value2 = 0;
   let value3 = null;
   let value4 = undefined;
   let value5 = NaN;
   let value6 = -1;
   let value7 = "";

   // 显式转换为布尔值
   let boolValue1 = Boolean(value1); // true,因为非空字符串是真值
   let boolValue2 = Boolean(value2); // false,因为0是假值
   let boolValue3 = Boolean(value3); // false,因为null是假值
   let boolValue4 = Boolean(value4); // false,因为undefined是假值
   let boolValue5 = Boolean(value5); // false,因为NaN是假值
   let boolValue6 = Boolean(value6); // true,因为-1是一个非零数值,所以是真值
   let boolValue7 = Boolean(value7); // false,因为空字符串是假值


2. **隐式转换(例如在 if 语句中)**:


   let someVariable = 42;

   if (someVariable) {
     console.log('The variable is truthy.'); // 输出:The variable is truthy.
   }

   someVariable = 0;

   if (someVariable) {
     console.log('The variable is truthy.');
   } else {
     console.log('The variable is falsy.'); // 输出:The variable is falsy.
   }

在JavaScript中,任何非零的数字、非空字符串、对象(包括数组和函数)、以及非`null`、`undefined`或`NaN`的值,在转换为布尔值时都会被视为`true`(真值)。而`0`、`""`(空字符串)、`null`、`undefined`和`NaN`则会被视为`false`(假值)。

转载请说明出处内容投诉
CSS教程_站长资源网 » 前端之“JavaScript:前端开发的核心语言及其在网页交互与动态功能实现中的关键作用“第一天

发表评论

欢迎 访客 发表评论

一个令你着迷的主题!

查看演示 官网购买