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

JavaScript基础

了解

CSS预处理器:CSS预处理器定义了一种新的语言,其基本思想是,用一种专门的编程语言,为CSS增加了一些编程的特性,将CSS作为目标生成文件,然后开发者就只要使用这种语言进行CSS的编程工作,转化成“用一种专门的编程语言,进行Web页面样式设计,再通过编译器转化为正常的CSS文件,以供项目使用。”

  • SASS:基于Ruby,通过服务器处理,功能强大,解析效率高,需要学习Ruby语言
  • LESS:基于NodeJS,通过客户端处理,使用简单,功能比SASS简单,解析效率也低于SASS。

JavaScript:弱类型脚步语言,其源代码再发往客户端运行之前不需要经过编译,而是将文本格式的字符代码发送给浏览器有浏览器解释运行。

Native原生JS开发

原生JS开发:根据【ECMAScript】标准的开发方式,简称是ES,特点是所有浏览器都支持。

TypeScript微软的标准

TypeScript是一种由微软开发的自由和开源的编程语言。它是JavaScript的一个超集,而且本质上这个语言添加了可选的静态类型和基于类的面向对象编程。该语言具备ES的特性之外还纳入了许多不在标准范围内的新特性,所以需要编译成JS后才能被浏览器正确执行。

JavaScript的框架

  • jQuery库:简化了DOM操作,缺点:DOM操作太频繁,影响前端性能
  • Angular:将后台的MVC模式搬到前端并增加了模块化开发的理念,采用TypeScript语法开发
  • React:高性能的JS前端框架,提出了新概念【虚拟DOM】用于减少真实DOM操作,在内存中模拟DOM操作,有效提升前端渲染效率,缺点是使用复杂,需要学习JSX语言
  • Vue:一款渐进式JavaScript框架,逐步实现新特性,如实现模块化开发、路由、状态管理等新特性,特点是综合了Angular(模块化)和React(虚拟DOM)的优点
  • Axios:前端通信框架,因为Vue的边界明确,为了处理DOM,所以不具备通信能力,此时就需要额外使用一个通信框架与服务器交互,也可以直接选择使用jQuery提供的AJAX通信能力。

JavaScript是一门世界上最流行的脚本语言,ECMscript是JavaScript的一个标准。

引入方式

内部引入

在script标签内写JavaScript代码,script标签可放在head或body里面

效果图:

外部引入 

创建JavaScript文件。

在需要引入的html文件中使用script标签中的src属性引用。

基本语法

原生开发用es6语法

定义变量

变量类型    变量名(严格区分大小写)=变量值;

变量名:不能以数字开头 

 

控制台调试

利用控制台调试,在控制台打印变量,一般常用console.log()

断点调试 

 严格检查模式strict

默认检查时:全局变量

i=1;        //正常显示

局部变量用let

let i=1;

使用ES6语法,使用严格检查模式,预防JavaScript的随意性导致产生的一些问题

‘use strict’        //必须写在script的第一行

在严格检查模式下,该定义i出错,且无法打印

数据类型

数值、文本、图形、音频、视频等

js不区分小数和整数,Number

number

123//整数

123.4//浮点数

1.232e3//科学计数法

-23//负数

NaN//not a number

Infinity//无限大

字符串

1.正常字符串使用单引号或双引号包裹

转义字符\

‘abc’        //直接定义

"abc"

转义字符

\'        //字符串

\n        //换行

\t        //Tab

\u4e2d        //中

\x41        //ASCII字符中的A

2.多行字符串编写

利用`(Tab键上方)包裹的内容可以实现多行字符串编写

var str=`Hello,

world!

`

3.模板字符串

${变量名}将变量拼接在一起,如下

let name="Serenity";
let age=18;
let msg=`你好,${name}`

4.字符串长度

计算字符串长度:变量名.length

let student="student";
console.log(student.length) //7

5.字符串的不可变性

6.大小写转换

小写转换为大写:参数名.toUpperCase()

大写转换为小写:参数名.toLowerCase()

7.获取指定的下标

参数名.indexOf()方法

在student内,d的下标是3

8.substring()

substring(下标1,下标2)        //包含前面,不包含后面

student.substring(1);        //从下标为1的字符串开始截取到最后一个字符串

student.substring(1,3)        //从下标为1的字符开始截取,直到第2个

布尔值

true、false

console.log(2>1)
true
console.log(2<1)
 false

逻辑运算

&&两个都为真

 || 一个为真,结果为真

! 真变为假,假变为真

比较运算符

=        赋值

==        等于(类型不一样,值为一样,也会为true)

===        绝对等于(类型一样,值一样,才能为true)

NaN===NaN结果为false,因为NaN与所有的数值都不相等

判断NaN,只能通过isNaN来判断

isNaN(NaN)
true

浮点数问题

尽量避免使用浮点数进行计算,存在精度问题。

可使用Math进行计算

console.log(Math.abs((1/3)===(1-2/3))<0.00000001)        //控制台结结果为true

null和undefined

null        //空

undefined        //未定义

数组

Java数组中是一系列相同类型的对象,JS中不需要,JS中数组可以包含任意的数据类型,如下:

var arr=[1,2,3,4,5,'hello',null,true];

new Array(1,5,6,8,9,'hello');

取数组下标,如果越界,会提示undefined,如取下标为8的元素。

1.length获取数组长度

给arr.length赋值,数组大小会发生改变。赋值过大,会产生为定义元素,赋值过小,元素会丢失。

2.indexOf

通过元素,获得下标索引

arr.indexOf("hello")        //获取元素hello的下标
>5        //hello的下标为5

字符串的1和数字1不同


3.slice()截取数组的一部分,返回一个新数组,似于String中的substring

4.push()、pop()

数组名.push()        //将元素添加到数组尾部

数组名.pop()        //将尾部元素弹出

5.unshift()、shift()

数组名.unshift()        //将元素添加到数组头部

数组名.shift()        //将头部元素弹出

6.排序sort()

数组名.sort()

7.元素反转reverse()

['a', 'b', 'c', 'd']
arr1.reverse()
['d', 'c', 'b', 'a']

8.concat()拼接元素

返回一个新的数组,没有修改原数组

arr1.concat(1,2,3)
 ['d', 'c', 'b', 'a', 1, 2, 3]
arr1
['d', 'c', 'b', 'a']

9.连接符join()

打印拼接数组,使用特定的字符串连接

arr1.join('-')
'd-c-b-a'        //打印结果

10.多维数组

arr2=[[1,2],[3,4],['5','6']]

arr2[1][0]        //取值
3

对象

对象用大括号,数组用中括号。

Java定义对象:

Person person=new Person();

JS定义对象:每个属性用逗号隔开,最后一个属性不需要加,

注:JavaScript中的所有键都是字符串,值是任意对象

var 对象名={

        属性名:属性值,

         属性名:属性值,

         属性名:属性值

}

var person={
    name:"serenity",
    age:16,
    tags:['java','js','...']
}

控制台调用:

1.对象赋值

对象.属性名=属性值

person.age=19
person.age        //查看年龄
19

2.使用一个不存在的对象属性,不会报错,只会提示undefined

3.动态的删减属性,eg:通过delect删除对象的属性

delete person.name        //删除person对象的属性name

4.动态的添加,直接给新的属性添加值即可


5.判断属性值是否在这个对象中,'属性' in 对象

in可以找到父类的方法

6.hasOwnProperty()方法,判断一个属性是否是这个对象拥有的

流程控制

if判断

while循环(避免程序死循环),实现从1加到100

for循环

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

forEach循环

var num=[12,56,45,89,23,586,2,238,9];
        num.forEach(function (value) {
            console.log(value)
        })

for....in循环       

for(var index in object){

        对象[数字]

}

for (var nums in num){
            console.log(num[nums])
        }

Map和Set

获取Map内的值

var map=new Map([['xiaom',123],['fheb',456],['vf',452]]);
        var name=map.get('xiaom');//通过key获得value
        console.log(name);    //123

Map增加或修改set

delect()删除元素

map.delete("fheb");

Set:无序不重复的集合

var set=new Set([3,1,1,1]);    //Set可以去重
        console.log(set);

Set的add()方法与delete()

set.add(6);
set.delete(1);

判断是否包含某个数

set.has(6);

iterator

利用for of 遍历数组for in是使用下标

var num=[12,56,45,89,23,586,2,238,9];
for (var x of num){
            console.log(x)
        }

利用for of遍历Map数组

var map=new Map([['xiaom',123],['fheb',456],['vf',452]]);
for (var x of map){
            console.log(x)
        }

遍历Set

var set=new Set([3,1,1,1,5]);    //Set自动设置为无序不重复的集合
for (var y of set){
            console.log(y)
        }

相关文章:

  • “国补”带火手机换新,出售旧手机应如何保护个人信息安全
  • 基于跨学科任务图谱和大模型微调的智能体设计
  • 【云上探索实验室】定义开发新范式 —— Amazon Q Developer 的极简开发工坊
  • Redission可重试、超时续约的实现原理(源码分析)
  • 如何在望获实时 Linux 京博航友善 NanoPC-T6 上部署 Docker
  • 深入解析与操作:基于C++的PE文件处理技术揭秘
  • Docker部署中SQLite数据库同步问题解析
  • 备忘录模式:快速恢复原始数据
  • CSS 媒体查询:从入门到精通,打造跨设备完美体验
  • hot100_108. 将有序数组转换为二叉搜索树
  • sqlclchery面对复杂的sql语句怎么办
  • Jenkins上无法查看已成功生成的Junit报告
  • 从人机环境系统智能角度看传统IP的全球化二次创作法则
  • 前端防重复请求终极方案:从Loading地狱到精准拦截的架构升级
  • 设计模式之装饰器设计模式/包装设计模式
  • 【HeadFirst系列之HeadFirstJava】第3天之从零开始理解Java中的主数据类型和引用
  • 在聚类算法的领域特定语言(DSL)中添加一个度量矩阵组件
  • 游戏开发 游戏项目介绍
  • 记录首次安装远古时代所需的运行环境成功npm install --save-dev node-sass
  • 百度首页上线 DeepSeek 入口,免费使用
  • wordpress 谷歌/seo权重是什么意思
  • 查找做像册的网站/哪有恶意点击软件买的
  • 益阳营销型网站建设/百度推广关键词排名规则
  • 832网络销售平台/seo页面排名优化
  • 广州开发网站建设/营销推广网站推广方案
  • 住房和城乡建设部贰级建造师网站/网站设计公司有哪些