web应用 —— JavaScript(上)

简介: web应用 —— JavaScript

Web应用(acwing)


三、JavaScript


1.JS的调用方式与执行顺序


①使用方法


HTML页面中任意位置加上<script type="module"></script>标签即可


常见使用方式:


  • 直接在<script type="module"></script>标签内写JS代码。


  • 直接引入文件:<script type="module" src="/static/js/index.js"></script>


  • 将所需的代码通过import关键字引入到当前作用域。必须在js里export才能在html里import


import示例:


/static/js/index.js文件中的内容为:


let name = "acwing";
function print() {
    console.log("Hello World!");
}
export {
    name,
    print
}


<script type="module"></script>中的内容为:


<script type="module">
    import { name, print } from "/static/js/index.js";
    console.log(name); 
    print();
</script>


②执行顺序


  • 类似于HTML与CSS,按从上到下的顺序执行;


  • 事件驱动执行;


③HTML, CSS, JavaScript三者之间的关系


  • CSS控制HTML


  • JavaScript控制HTML与CSS


  • 为了方便开发与维护,尽量按照上述顺序写代码。例如:不要在HTML中调用JavaScript中的函数。


2.变量与运算符


①let与const


用来声明变量,作用范围为当前作用域。


  • let用来定义变量


  • const用来定义常量


例如:


let s = "acwing", x = 5;
let d = {
    name: "yxc",
    age: 18,
}
const n = 100;


②变量类型


  • number:数值变量,例如1, 2.5(不区分整数还是浮点数


  • string:字符串,例如"acwing", ‘yxc’,单引号与双引号均可。字符串中的每个字符为只读类型,不可改变,如果要改变,可以重新再定义一个变量,用substr函数改变,例如:let s3 = s1.substr(0, 1) + 'x' + s1.substr(2);,输出由s1(acwing)变为s3(axwing)


  • boolean:布尔值,例如true, false


  • object:对象,类似于C++中的指针,例如[1, 2, 3],{name: “yxc”, age: 18},null


  • undefined:未定义的变量


类似于Python,JavaScript中的变量类型可以动态变化,typeof可查询变量类型,console.log(typeof s)


③运算符


与C++、Python、Java类似,不同点:


  • 表示乘方


  • 等于与不等于用===!==


3.输入与输出


①输入


  • 从HTML与用户的交互中输入信息,例如通过input、textarea等标签获取用户的键盘输入,通过click、hover等事件获取用户的鼠标输入。


  • 通过Ajax与WebSocket从服务器端获取输入


  • 标准输入,示例:


cpp:


#include <iostream>
using namespace std;
int main () {
    int a, b;
    cin >> a >> b;
    cout << a + b << endl;
    return 0;
}


c


#include <stdio.h>
int main()
{
    int a, b;
    scanf("%d%d", &a, &b);
    printf("%d\n", a + b);
    return 0;
}


java


import java.io.*;
import java.util.*;
public class Main {
    public static void main(String args[]) throws Exception {
        Scanner cin=new Scanner(System.in);
        var a = cin.nextInt();
        var b = cin.nextInt();
        System.out.println(a + b);
    }
}


python


import sys
for line in sys.stdin:
    print sum(map(int, line.split()))


python3


import sys
for line in sys.stdin:
    print(sum(map(int, line.split())))


javascript


let fs = require('fs');
let buf = '';
process.stdin.on('readable', function() {
    let chunk = process.stdin.read();
    if (chunk) buf += chunk.toString();
});
process.stdin.on('end', function() {
    buf.split('\n').forEach(function(line) {
        let tokens = line.split(' ').map(function(x) { return parseInt(x); });
        if (tokens.length != 2) return;
        console.log(tokens.reduce(function(a, b) { return a + b; }));
    });
});


go


package main
import "fmt"
func main() {
  var a, b int
  for {
    n, _ := fmt.Scanf("%d %d", &a, &b)
    if n != 2 { break }
    fmt.Println(a + b)
  }
}


②输出


  • 调试用console.log,会将信息输出到浏览器控制台


  • 改变当前页面的HTML与CSS


  • 通过AjaxWebSocket将结果返回到服务器


③格式化字符串


  • 字符串中填入数值

let name = 'yxc', age = 18;
let s = `My name is ${name}, I'm ${age} years old.`;


定义多行字符串


let s = 
`<div>
    <h2>标题</h2>
    <p>段落</p>
/div>`


保留两位小数如何输出


let x = 1.234567;
let s = `${x.toFixed(2)}`;


4.判断语句


JavaScript中的if-else语句与C++PythonJava中类似。


例如:


let score = 90;
if (score >= 85) {
    console.log("A");
} else if (score >= 70) {
    console.log("B");
} else if (score >= 60) {
    console.log("C");
} else {
    console.log("D");
}


JavaScript中的逻辑运算符也与C++Java中类似:


  • &&表示与


  • ||表示或


  • !表示非


5.循环语句


JavaScript中的循环语句与C++中类似,也包含forwhiledo while循环。


for循环


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


枚举对象或数组时可以使用:


  • for-in循环,可以枚举数组中的下标,以及对象中的key


  • for-of循环,可以枚举数组中的值,以及对象中的value


while循环


let i = 0;
while (i < 10) {
    console.log(i);
    i++;
}


do while循环


do while语句与while语句非常相似。唯一的区别是,do while语句限制性循环体后检查条件。不管条件的值如何,我们都要至少执行一次循环。


let i = 0;
do {
    console.log(i);
    i++;
} while (i < 10);


6.对象


英文名称:Object


类似于C++中的map,由key:value对构成。


  • value可以是变量、数组、对象、函数等。


  • 函数定义中的this用来引用该函数的“拥有者”。


例如:


let person = {
    name: "yxc",
    age: 18,
    money: 0,
    add_money: function (x) {
        this.money += x;
    }
}


对象属性与函数的调用方式:


  • person.nameperson.add_money()


  • person["name"]person["add_money"]()


7.数组


①数组中的元素类型


数组是一种特殊的对象


类似于C++中的数组,但是数组中的元素类型可以不同


  • 数组中的元素可以是变量、数组、对象、函数


例如:


let a = [1, 2, "a", "yxc"];
let b = [
    1,  // 变量
    "yxc",  // 变量
    ['a', 'b', 3],  // 数组
    function () {  // 函数
        console.log("Hello World");
    },
    { name: "yxc", age: 18 }  // 对象
];


②访问数组中的元素


通过下标。


例如:


a[0] = 1; // 访问数组a[]的第0个元素
console.log(a[0]);


③数组的常用属性和函数


  • 属性length:返回数组长度。注意length属性,不是函数,因此调用的时候不要加()


  • 函数push():向数组末尾添加元素


  • 函数pop()删除数组末尾的元素


  • 函数splice(a, b):删除a开始的b个元素


  • 函数sort():将整个数组从小到大排序


  • 自定义比较函数:array.sort(cmp),函数cmp输入两个需要比较的元素,返回一个实数,负数表示第一个参数小于第二个参数0表示相等正数表示大于
相关文章
|
19天前
|
前端开发 JavaScript 安全
前端性能调优:HTTP/2与HTTPS在Web加速中的应用
【10月更文挑战第27天】本文介绍了HTTP/2和HTTPS在前端性能调优中的应用。通过多路复用、服务器推送和头部压缩等特性,HTTP/2显著提升了Web性能。同时,HTTPS确保了数据传输的安全性。文章提供了示例代码,展示了如何使用Node.js创建一个HTTP/2服务器。
32 3
|
24天前
|
移动开发 开发者 HTML5
构建响应式Web界面:Flexbox与Grid的实战应用
【10月更文挑战第22天】随着互联网的普及,用户对Web界面的要求越来越高,不仅需要美观,还要具备良好的响应性和兼容性。为了满足这些需求,Web开发者需要掌握一些高级的布局技术。Flexbox和Grid是现代Web布局的两大法宝,它们分别由CSS3和HTML5引入,能够帮助开发者构建出更加灵活和易于维护的响应式Web界面。本文将深入探讨Flexbox和Grid的实战应用,并通过具体实例来展示它们在构建响应式Web界面中的强大能力。
34 3
|
7天前
|
缓存 安全 网络安全
HTTP/2与HTTPS在Web加速中的应用
HTTP/2与HTTPS在Web加速中的应用
|
9天前
|
SQL 安全 前端开发
PHP与现代Web开发:构建高效的网络应用
【10月更文挑战第37天】在数字化时代,PHP作为一门强大的服务器端脚本语言,持续影响着Web开发的面貌。本文将深入探讨PHP在现代Web开发中的角色,包括其核心优势、面临的挑战以及如何利用PHP构建高效、安全的网络应用。通过具体代码示例和最佳实践的分享,旨在为开发者提供实用指南,帮助他们在不断变化的技术环境中保持竞争力。
|
20天前
|
前端开发 安全 应用服务中间件
前端性能调优:HTTP/2与HTTPS在Web加速中的应用
【10月更文挑战第26天】随着互联网的快速发展,前端性能调优成为开发者的重要任务。本文探讨了HTTP/2与HTTPS在前端性能优化中的应用,介绍了二进制分帧、多路复用和服务器推送等特性,并通过Nginx配置示例展示了如何启用HTTP/2和HTTPS,以提升Web应用的性能和安全性。
18 3
|
20天前
|
数据可视化 JavaScript 前端开发
数据可视化进阶:D3.js在复杂数据可视化中的应用
【10月更文挑战第26天】数据可视化是将数据以图形、图表等形式呈现的过程,帮助我们理解数据和揭示趋势。D3.js(Data-Driven Documents)是一个基于JavaScript的库,使用HTML、SVG和CSS创建动态、交互式的数据可视化。它通过数据驱动文档的方式,将数据与DOM元素关联,提供高度的灵活性和定制性,适用于复杂数据的可视化任务。 示例代码展示了如何使用D3.js创建一个简单的柱状图,展示了其基本用法。D3.js的链式调用和回调函数机制使代码简洁易懂,支持复杂的布局和交互逻辑。
60 3
|
20天前
|
前端开发 JavaScript API
前端框架新探索:Svelte在构建高性能Web应用中的优势
【10月更文挑战第26天】近年来,前端技术飞速发展,Svelte凭借独特的编译时优化和简洁的API设计,成为构建高性能Web应用的优选。本文介绍Svelte的特点和优势,包括编译而非虚拟DOM、组件化开发、状态管理及响应式更新机制,并通过示例代码展示其使用方法。
34 2
|
20天前
|
测试技术 持续交付 PHP
PHP在Web开发中的应用与最佳实践###
【10月更文挑战第25天】 本文将深入探讨PHP在现代Web开发中的应用及其优势,并分享一些最佳实践来帮助开发者更有效地使用PHP。无论是初学者还是有经验的开发者,都能从中受益。 ###
41 1
|
21天前
|
负载均衡 监控 算法
论负载均衡技术在Web系统中的应用
【11月更文挑战第4天】在当今高并发的互联网环境中,负载均衡技术已经成为提升Web系统性能不可或缺的一环。通过有效地将请求分发到多个服务器上,负载均衡不仅能够提高系统的响应速度和处理能力,还能增强系统的可扩展性和稳定性。本文将结合我参与的一个实际软件项目,从项目概述、负载均衡算法原理以及实际应用三个方面,深入探讨负载均衡技术在Web系统中的应用。
48 2
|
17天前
|
前端开发 JavaScript
JavaScript新纪元:ES6+特性深度解析与实战应用
【10月更文挑战第29天】本文深入解析ES6+的核心特性,包括箭头函数、模板字符串、解构赋值、Promise、模块化和类等,结合实战应用,展示如何利用这些新特性编写更加高效和优雅的代码。
33 0