JavaScript基础(基础语法-流程控制-数组-Set数据结构)

一、JavaScript基础

基础语法
JavaScript简介

概念
  JavaScript 是一种运行在客户端(浏览器)的编程语言 
作用
  1、网页特效 (监听用户的一些行为让网页作出对应的反馈) 
  2、表单验证 (针对表单数据的合法性进行判断) 
  3、数据交互 (获取后台的数据, 渲染到前端)
  4、服务端编程 (node.js) 
组成
  ECMAscript 
  DOM
  BOM

输入输出语法

输入语法

let username = prompt('请输入姓名:')

输出语法

document.write('<h2>' + username + '</h2>')
// 2. alert 警示
alert('黑马')
// 3. 控制台输出语法
console.log('我是用来测试的')
conso.dir(object) // 可以显示一个对象所有的属性和方法。
变量

概念和作用:容器
变量的本质:在内存中开辟一个空间
命名规则和规范
  规则:
    由字母、数字、下划线、$符号组成,不能以数字开头
    不能是关键字和保留字,例如:var for while
    严格区分大小写
  规范:
    变量名必须有意义
    遵守小驼峰式命名法
var声明变量和let的区别(了解)
    let为了解决var的一些问题
    var声明:
      可以先使用再声明 (不合理)
      var声明过的变量可以重复声明(不合理)
      比如变量提升、全局变量、没有块级作用域等等

数据类型

基本数据类型
  number 数值型
  string 字符串
    单引号  双引号  反引号
    字符串拼接
      ①’xxx’+ 变量名 +‘xxx’
      ②模板字符串(ES6)
        模板字符串中可以解析变量
        模板字符串中可以换行
        在模板字符串中可以调用函数

let username = prompt('请输入姓名:')
let age = prompt('请输入年龄:')
document.write(`
	<h2>用户姓名:${username}</h2>
	<h2>用户年龄:${age}</h2>
`)

boolean 布尔型
  undefined 未定义
  null 空引用
引用数据类型
  object 对象
  function 函数
  array 数组

let arr = ['001', '002', '003']
for (let string of arr) {
	alert(string)
}
document.write('<h1>' + arr[0] + '</h1>')

检测数据类型

console.log(typeof '123')
数据类型转换

一、显示转换
  转换成数字
    Number(变量)
    parse系列
  转换成字符串
    String()
    变量.toString() 【括号里面可以跟进制】

/*************** 转换为数字型 **************/
console.log(Number('10.10')) // number 10.1

// 只能转换数字类型的字符,不能放非数字类型的字符
console.log(Number('10.10abc')) // NaN (not a number)

// 转换为数字型,只保留整数,没有四舍五入
console.log(parseInt('10.5')) // number 10

// 转换为数字型,保留小数
console.log(parseFloat('25.25')) // number 25.25
// 当字符串以数字开头时,才能过滤非数字类型的字符
console.log(parseFloat('width10.10px')) // NaN (not a number)
console.log(parseFloat('10.10px')) // 10.1 (经常用于过滤单位)

/*************** 转换为字符型 **************/
console.log(String(111)) // string '111'
console.log((111).toString()) // string 转换为十进制字符串
console.log((10).toString(2)) // 1010 转换为二进制字符串

二、隐式转换的小技巧
  +号作为正号解析可以转换成Number

// + 号两边只要有一个是字符串,都会把另外一个转成字符串
// 除了 + 以外的算术运算符比如 – * / 等都会把数据转成数字类型
console.log('2022' + 2022) // string '20222022'
// + 号作为正号解析可以转换成 Number
console.log(10 + +'11') // number 21
操作基本数据类型(进阶&积累)

①去除字符串两侧多余的空格

let str = '    Hello    '
console.log(str) // [    Hello    ]
console.log(str.trim()) // [Hello]

②判断参数字符串是否在原字符串的头部,返回布尔值
③判断参数字符串是否在原字符串的尾部,返回布尔值

let str = 'Hello world!';
str.startsWith('Hello') // true 
str.endsWith('!') // true

④将原字符串重复n次,返回一个新字符串

'x'.repeat(3) // "xxx" 
'hello'.repeat(2) // "hellohello"
流程控制
运算符

算术运算符

优先级运算符顺序
1小括号()
2一元运算符++  –  !
3算数运算符先 * / % 后 + -
4关系运算符>  >=  <  <=
5相等运算符==  !=  ===  !==
6逻辑运算符先 &&  后 ||
7赋值运算符=
8逗号运算符,

比较运算符
  > , >= , < , <= , == , != , === , !==
  == 判断,只要值相等,不要求数据类型一样即可返回true
   ===全等,要求值和数据类型都一致才返回true
  特殊说明
    如果是数字和"其他值"的比较 则其他值会自动转换成数字去比较

console.log(5 == '5') // true

涉及到"NAN"都是false (NaN)

/************** NaN 和任何数据都不一样 **************/
console.log(NaN === NaN) //false

如果是"字符串"和"字符串"比较 则会比较每一个字符的ASCII码,同时是按位进行比较

console.log('pink' > 'red') // false

如果是布尔值参与比较 布尔值会转换成数字0和1

逻辑运算符

/**
 * 逻辑运算符里面的短路:
 *      && 左边为 false 就短路,右边代码不再执行
 *      || 左边为 true 就短路,右边代码不再执行
 *      运算结果:无论 && 还是 ||,运算结果都是最后被执行的表达式值,一般用在变量赋值
 * 以下五个值是被当作 false
 *      false  0  ''  undefined  null
 */
console.log('逻辑运算符里面的短路:')
console.log(false || 20) // 20
console.log(10 || 20) // 10


/************** 案例 判断数据是否被整除 **************/
console.log('案例 判断数据是否被整除:')
let num = prompt('请输入一个数')
console.log(num)
num = num || 0
console.log(num) // 当用户未输入值时,默认num=0
console.log(num % 4 === 0 && num % 100 !== 0)
语句

顺序语句

分支语句
  if分支
    三元运算符
    switch case
      一般需要配合break关键字使用 没有break会造成case穿透
      比较的值全等 ===

let num = +prompt('请输入1-2的数字:')
switch (num) {
	case 1:
		alert(`您输入了数字${num}`)
		break
	case 2:
		alert(`您输入了数字${num}`)
		break
	default:
		alert(`您输入了错误信息`)
}

循环语句
  while
  循环语句的跳出
    break: 一般用于结果已经得到, 后续的循环不需要的时候可以使用
    continue: 一般用于排除或者跳过某一个选项的时候, 可以使用continue

数组
操作数组
/**
 * 声明语法
 *      let 数组名 = [数据1, 数据2, ..., 数据n]
 *      例: let names = ['小明', '小刚', '小红', '小丽', '小米']
 * 数组是按顺序保存,所以每个数据都有自己的编号
 * 计算机中的编号从O开始,所以小明的编号为0,小刚编号为1,以此类推
 * 在数组中,数据的编号也叫索引或下标
 * 数组可以存储任意类型的数据
 */
let names = ['小明', '小刚', '小红', '小丽', '小米']

/** 数组.push()方法将一个或多个元素添加到数组的末尾,并返回该数组的新长度(重点) */
let length = names.push(`小峰`)
console.log("length", length)

/** 数组.unshift()方法将一个或多个元素添加到数组的开头,并返回该数组的新长度(重点) */
length = names.unshift('华为')
console.log("length", length)

/** 数组. pop()方法从数组中删除最后一个元素,并返回该元素的值 */
let deleteName = names.pop()
console.log('删除的元素', deleteName)

/** 数组.shift()方法从数组中删除第一个元素,并返回该元素的值 */
deleteName = names.shift()
console.log('删除的元素', deleteName)

/**
 * 数组.splice()方法删除指定元素
 * arr.splice(start, deleteCount)
 * arr.splice(起始位置, 删除几个元素)
 * start:
 *      起始位置
 *      指定修改的开始位置(从0计数)
 * deleteCount:
 *      表示要移除的数组元素的个数
 *      可选的,如果省略则默认从指定的起始位置删除到最后
 */
names.splice(2, 2)
遍历数组

冒泡排序

/** 冒泡排序是一种简单的排序算法。
 * 它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。
 * 走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
 * 这个算法的名字由来是因为越小的元素会经由交换慢慢”浮“到数列的顶端。
 */
let arr = [5, 6, 9, 4, 6, 3, 8]
// 外层循环控制趟数
for (let i = 0; i < arr.length - 1; i++) {
    // 内层循环控制每趟比较的次数
    for (let j = 0; j < arr.length - i - 1; j++) {
        if (arr[j] > arr[j + 1]) {
            let temp = arr[j]
            arr[j] = arr[j + 1]
            arr[j + 1] = temp
        }
        console.log(`${i + 1}趟,第${j + 1}`, arr)
    }
}
操作数组(进阶&积累)
let arr = [1, 2, 3, 4, 5];
/************** forEach 迭代数组 **************/
arr.forEach(function (value, index, array) {
 console.log('数组当前项的值' + value)
 console.log('数组当前项的索引' + index)
 console.log('数组对象本身' + array)
 if (value === 3) {
     console.log('找到了该元素');
     return true; // 在forEach 里面 return 不会终止迭代
 }
})

/************** filter 筛选数组 直接返回一个新数组 **************/
let newArr2 = arr.filter(function (value, index, array) {
console.log('数组当前项的值' + value)
console.log('数组当前项的索引' + index)
console.log('数组对象本身' + array)
if (value === 3) {
  console.log('找到了该元素');
  return true; // filter 里面 return 不会终止迭代
}
return value >= 3
})
console.log(newArr2) // [3, 4, 5]

/**
 * 检测数组中的元素是否满足指定条件
 * 返回值是布尔值 ,如果查找到这个元素, 就返回 true ,如果查找不到就返回 false
 * 如果找到第一个满足条件的元素,则终止循环. 不在继续查找
 */
let flag = arr.some(function (value, index, array) {
    if (value === 3) {
        console.log('找到了该元素');
        return true; // some 里面 return 会终止迭代
    }
    return value >= 6
})
console.log(flag) // false

/************** find 找出第一个符合条件的数组成员, 如果没有找到返回 undefined **************/
let ary = [{id: 1,name: '张三'}, {id: 2,name: '李四'}, {id: 2,name: '王五'}];
let target = ary.find(item => item.id === 2);
console.log(target) // {id: 2, name: '李四'}

/************** findIndex() 找出第一个符合条件的数组成员的位置, 如果没有找到返回-1 **************/
let ary = [10, 20, 50];
let index = ary.findIndex(item => item > 15);
console.log(index) // 1

/************** includes() 表示某个数组是否包含给定的值,返回布尔值 **************/
[1, 2, 3].includes(2) // true 
[1, 2, 3].includes(4) // false

扩展运算符

// 扩展运算符可以将数组或者对象转为用逗号分隔的参数序列
let array = ["a", "b", "c"];
console.log(...array); // a b c
console.log("a", "b", "c") // a b c

// 扩展运算符可以应用于合并数组
let ary1 = [1, 2, 3];
let ary2 = [4, 5, 6];
// 方法一
let ary3 = [...ary1, ...ary2];
console.log(ary3) // [1, 2, 3, 4, 5, 6]
// 方法二
ary1.push(...ary2);
console.log(ary1) // [1, 2, 3, 4, 5, 6]

// 将类数组或可遍历对象转换为真正的数组
let oDivs = document.getElementsByTagName('div');
let ary4 = [...oDivs];
console.log(ary4);

构造函数方法:Array.from()

/** 将类数组或可遍历对象转换为真正的数组 */
let arrayLike = {
   "0": "张三",
   "1": "李四",
   "2": "王五",
   "length": 3
}
let ary = Array.from(arrayLike);
console.log(ary) // ['张三', '李四', '王五']

/** 方法还可以接受第二个参数,作用类似于数组的map方法,用来对每个元素进行处理,将处理后的值放入返回的数组 */
let arrayLike2 = {
   "0": "1",
   "1": "2",
   "length": 2
}
let ary2 = Array.from(arrayLike2, item => item * 2)
console.log(ary2) // [2, 4]
Set数据结构

ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值
Set本身是一个构造函数,用来生成 Set 数据结构
  const s = new Set();
Set函数可以接受一个数组作为参数,用来初始化
  const s = new Set([“a”,“a”,“b”,“b”]);

const s = new Set();
s.add(1).add(2).add(3); /** 向 set 结构中添加值,返回 Set 结构本身 */
s.delete(2)             /** 删除 set 结构中的2值,返回一个布尔值,表示删除是否成功 */ 
s.has(1)                /** 表示 set 结构中是否有1这个值 返回布尔值 */ 
s.clear()               /** 清除所有成员,没有返回值 */

/** Set函数可以接受一个数组作为参数,用来初始化 */
const s = new Set(["a","a","b","b"]); 
console.log(s.size) // 2
console.log([...s]) // ['a', 'b']

/** 向 set 结构中添加值,返回 Set 结构本身 */
s.add(1).add(2) 
console.log([...s]) // ['a', 'b', 1, 2]

/** 删除 set 结构中的2值,返回一个布尔值,表示删除是否成功 */ 
const r1 = s.delete('a'); 
console.log(r1); // true
console.log([...s]) // ['b', 1, 2]

/** 表示 set 结构中是否有1这个值 返回布尔值 */
const r2 = s.has('b'); 
console.log(r2) // true

/** 遍历set数据结构中的值 */
s2.forEach(value => {
 console.log(value)
})

/** 清除所有成员,没有返回值 */
s.clear(); 
console.log([...s]); // []
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值