JS基础

变量

【1】JS变量的命名规范#

  • 变量名只能是由 数字 字母 下划线 $ 组成的
  • 推荐使用 驼峰式命名 如 userName首字母不推荐大写(python推荐使用下划线连接)
  • 不能用关键字作为变量名

【2】var let const的区别#

  • var时一个全局的变量声名关键字,在函数内可以直接对他修改
  • let是一个块级变量声名关键字,在函数内无法进行引用修改
  • const用于声名一个常量,不可以对其进行再次赋值,它和let关键字一样,是一个块级变量的声名关键字。

数据类型

  • JS是个动态数据类型语言,变量名可以指向任意的数据类型

【1】数值类型(number)#

var a = 11

-- 查看数据类型
typeof a

-- 数据类型转换 -- 只要开头由数字就行
parseInt('11.11') -- 11 
parseInt('111asdasdsadsa112') -- 111
parseInt('asdasdsadsa111') -- NaN

【2】字符类型(string)#

  • 定义字符串使用单引号或者双引号
  • 在定义多行字符串使不能使用三引号,但是可以通过``来定义
  • 在js中称之为模板字符串
  • 通过${变量名}可以实现格式化字符串操作
  • 如果大括号里面的变量名没有事先定义好就会直接报错
  • 在js中字符串拼接推荐直接使用+相连接
-- 定义
-- 单引号
var a = 'green'

-- 双引号
var a = "green"

-- 模板字符串
var a = `
green
hqq
heihiehei
`
-- 格式化字符串
var name = 'green'
var age = 18
var info = `my name is ${name} and my age is ${age}`

-- 字符串拼接
console.log(name+info)

  • 常用方法#

-- 获取长度 length()
var name = 'hqq'
name.length

-- 移除空白 trim()
var name = '  hqq  '.trim()

-- 返回字符串对应索引的值 charAt()
var name = 'hello word'
name.charAt(3) -- l

-- 返回指定字符串首字符在指定字符串的索引的位置 indexOf()
-- 不存在则返回-1
var name = 'hello green'
name.indexOf('llo')

-- 切片操作 slice()
var name = 'hello green'
console.log(name.slice(0,2))

-- 转小写 toLowerCase()
var name = 'hello green'
console.log(name.toLowerCase())

-- 转大写 toUpperCase()
var name = 'hello green'
console.log(name.toUpperCase())

-- 分割 split()
var name = 'hello green'
console.log(name.split(' ')) // [ 'hello', 'green' ]

-- 拼接 concat()
var name = 'hello green'
var res = name.concat('hello') // hello greenhello

总结#

方法 说明
.length 返回长度
.trim() 移除空白
.trimLeft() 移除左边的空白
.trimRight() 移除右边的空白
.charAt(n) 返回第n个字符
.concat(value, ...) 拼接
.indexOf(substring, start) 子序列位置
.substring(from, to) 根据索引获取子序列
.slice(start, end) 切片
.toLowerCase() 小写
.toUpperCase() 大写
.split(delimiter, limit) 分割

【3】布尔值(boolean)#

  • 在js中布尔值是全小写的 true false,与python不一样

  • 在js中布尔值为false的有 空字符串,0,null,NaN,undefined 等等

  • null与 undefined的区别

-- null
表示值为空,一般用于指定或者清空一个变量使用

-- undefined
表示声名了一个变量,但是没有初始化(没有赋值)

【4】对象(object)#

  • 在js中一切皆对象
  • 如 字符串 数值 数组 函数 等
  • js还允许自定义对象
-- 数组(类似于python中的列表)
-- js中数组的索引不支持负数
var l = [11,'green',true,3.14]
console.log(typeof l) // object
console.log(l[1]) // green
console.log(l[-1]) // undefined
  • 常用方法#

-- 获取长度 length()
var l = [11,11.1,'green',true]
l.length

-- 尾部追加元素 push(ele)
var l = [11,11.1,'green',true]
l.push(false)

-- 弹出尾部的元素 pop()
var l = [11,11.1,'green',true]
var res = l.pop()
console.log(res) // true
console.log(l) // [ 11, 11.1, 'green' ]

--  unshift() 向数组的开头添加一个或者多个元素,并且返回数组长度
var l = [11,11.1,'green',true]
l.unshift(false)
console.log(l) // [ false, 11, 11.1, 'green', true ]

-- 头部移除元素 shift()
var l = [11,11.1,'green',true]
l.shift()
console.log(l) // [ 11.1, 'green', true ]

-- 切片操作 slice(start,end) 顾头不顾尾
var l = [11,11.1,'green',true]
var res = l.slice(1,3)
console.log(res) // [ 11.1, 'green' ]

-- 反转操作 reverse()
var l1 = [12, 21, 32, 11, 28, 17]
res = l1.reverse()
console.log(l1) // [ 17, 28, 11, 32, 21, 12 ]

-- 将数组元素和字符串拼接成字符串 join()
-- js的join和python的join有些不同 python列表是作为参数传递给join方法
var l = [11,11.1,'green',true]
var res = l.join('|')
console.log(res) // 11|11.1|green|true

-- 连接数组 concat(val,...)
var l1 = [1, 2, 3, 4]
var l2 = [5, 6, 7, 8]
var res = l1.concat(l2)
console.log(res) // [1, 2, 3, 4,5, 6, 7, 8]

-- 排序 sort()
var l1 = [12, 21, 32, 11, 28, 17]
l1.sort()
console.log(l1) // [ 11, 12, 17, 21, 28, 32 ]
  • 重点掌握的方法#

-- forEach() 将数组的每个元素传递给回调函数
-- forEach 有两个参数,第一个填函数,第二个填数组,其中函数参数可以有三个 但是只有value是必须的
-- 这个方法会遍历数组中的所有元素然后回传给函数
-- value 是回传函数的结果 index是传来的参数在原数组的索引,array是传来的参数的数据源

var l1 = [111,222,333,444,555,666]
l1.forEach(function (value,index,array){console.log(value,index,array)},l1)
`
111 0 [ 111, 222, 333, 444, 555, 666 ]
222 1 [ 111, 222, 333, 444, 555, 666 ]
333 2 [ 111, 222, 333, 444, 555, 666 ]
444 3 [ 111, 222, 333, 444, 555, 666 ]
555 4 [ 111, 222, 333, 444, 555, 666 ]
666 5 [ 111, 222, 333, 444, 555, 666 ]
`
-- spilce(start,deleteCount,items) 删除元素,并向数组添加新的元素
-- spilce有三个参数,其中items是可填可不填的
-- start 和 deleteCount 组合起来用,意思是从索引为start的位置开始,删除deleteCount个元素,然后在数组的start位置添加items元素。

var l1 = [111,222,333,444,555,666]
l1.splice(0,3,777)
console.log(l1) // [ 777, 444, 555, 666 ]
-- map(function(value,index,array){...},数组)
-- js的map和python的map差不多

var l1 = [111, 222, 333, 444, 555, 666]
var res = l1.map(function (value) {
    return value*2
}, l1)
console.log(res) //  [ 222, 444, 666, 888, 1110, 1332 ]                      
-- reduce

总结#

方法 说明
.length 数组的大小
.push(ele) 尾部追加元素
.pop() 获取尾部的元素
.unshift(ele) 头部插入元素
.shift() 头部移除元素
.slice(start, end) 切片
.reverse() 反转
.join(seq) 将数组元素连接成字符串
.concat(val, ...) 连接数组
.sort() 排序
.forEach() 将数组的每个元素传递给回调函数
.splice() 删除元素,并向数组添加新元素。
.map() 返回一个数组元素调用函数处理后的值的新数组

运算符

【1】算术运算符#

  • 加法运算符 + 用于相加两个数或连接两个字符串。
var sum  = 3 + 5
var t = 'hello' + 'word'
console.log(sum) // 8
console.log(t) // helloword
  • 减法运算符 - 用于相减两个数。
var num = 5 - 3
console.log(num) // 2
  • 乘法运算符 * 用于相乘两个数。
var num = 5 * 3
console.log(num) // 15
  • 除法运算符 / 用于相除两个数。
var num = 6 / 3
console.log(num) // 2
  • 取余运算符 % 返回两个数相除的余数。
var num = 6 % 4
console.log(num) // 2

【2】比较运算符#

  • 相等运算符 == 和不相等运算符 != 比较两个值是否相等或不相等。
var isTrue = (5 == '5')
var isFalse = (5 != '5')
console.log(isTrue) // true
console.log(isFalse) // false
  • 严格相等运算符 === 和严格不相等运算符 !== 比较两个值的值和类型是否完全相等或不相等。
var isTrue = (5 === '5')
var isFalse = (5 !== '5')
console.log(isTrue) // false
console.log(isFalse) // true
  • 大于 >、小于 <、大于等于 >=、小于等于 <= 用于比较两个值的大小。
var greaterThan = (8 > 5);   // true
var lessThan = (3 < 5);      // true
var greaterThanOrEqual = (10 >= 10);  // true
var lessThanOrEqual = (7 <= 6);       // false

【3】逻辑运算符#

  • 逻辑与 && 当且仅当两个操作数都为真时返回真。
var res = true && false
console.log(res) // false
  • 逻辑或 || 当至少一个操作数为真时返回真。
var res = true || false
console.log(res) // true
  • 逻辑非 ! 返回操作数的逻辑反值。
var res = !true
console.log(res) // false

【4】其他运算符#

  • 赋值运算符 = 用于将右侧的值赋给左侧的变量。
var x = 10
  • 三元条件运算符 condition ? expr1 : expr2 简单的条件语句,如果条件为真,则返回 expr1,否则返回 expr2
var res = (1 > 2) ? 'yes' : 'no'
console.log(res) // no

流程控制

【1】if-else#

  • 由if(条件){操作语句}else{操作语句}组成
  • 如果if里面的条件成立,就会执行紧跟后面的操作语句
  • 如果不成立就会执行else后面的操作语句
var a = 17
if (a>=18){
    console.log('恭喜你成年了')
}else {
    console.log('小屁孩,好好读书')
}
`小屁孩,好好读书`

【2】if-else if-else#

var grade = 40

if (grade >= 90) {
    console.log('你的成绩很优秀')
} else if (60<=grade && grade<90 ){
    console.log('小伙子一般般啊')
}else {
    console.log('让你好好读书,偏偏要放牛')
}

【3】swith#

  • swith就是提前列举好可能出现的条件,并且在后面跟上响应的操作语句
  • 注意在每个操作语句的最后要加上break,要不然在匹配到第一个符合的条件之后就会一直往下执行。
var age = 11

switch (age){
    case 17:
        console.log('还没成年哦小弟弟')
        break
    case 18:
        console.log('刚刚成年哦,注意一下')
        break
    case 21:
        console.log('老司机哦,888套票安排')
        break
    default:
        console.log('未知未知')
}

【4】for循环#

  • for后面的小括号要跟三个参数
  • 初始化表达式:这个表达式在循环开始之前执行,通常用来初始化计数器变量
  • 条件表达式:这个表达式在每次循环迭代之前都会进行判断,为true就执行,为false就终止循环
  • 增量表达式:这个表达式在每次循环迭代之后执行,通常用于更新计数器变量的值
for(let i=0;i<5;i++){
    console.log(i)
}

【5】while循环#

var i = 0
while (i<=100){
    console.log(i,'sb')
    i++
}

【6】三元运算符#

var a = 1>2?1:3
console.log(a)

函数

  • 在python中定义函数需要用到关键字def

  • 在js中定义函数需要用到关键字function

  • 格式:function 函数名(形参1,形参2,形参3...)

【1】无参函数#

function a (){
    console.log('hello world')
}
a()

【2】有参函数#

  • 在js中,不管多传了参数还是少传了参数,都不会报错
  • 如果多传了参数,那么函数只会接收前面的指定个参数
  • 如果传少了,只会输出传了的那个参数,其他没有传的用undefined表示
function func(a,b){
    console.log(a,b)
}
func(1,2)
-- arguments可以获取到传入的参数
function func(a,b){
    console.log(arguments) // [Arguments] { '0': 1, '1': 2 }
    console.log(a,b) // 1 2
}

func(1,2)

-- 可以利用arguments的长度做一个判断
function func(a,b){
    if (arguments.length<2){
        console.log('传少了')
    }else if (arguments.length>2){
        console.log('传多了')
    }else {
        console.log('正常执行')
        console.log(a,b)
    }
}

func(1,2)

【3】函数的返回值#

  • 如果函数返回了多个返回值,用一个变量接收的话只能拿到一个返回值
  • js中没有解压赋值一说,但是可以通过用一个数组接收,在通过索引取值的方式,用多个变量接收。
  • return除了用来返回值之外,还可以用来提前结束函数的执行流程
function func() {
    return [111, 333]
}

var res = func()
var a = res[0]
var b =res[1]

console.log(a) // 111
console.log(b) // 333

【4】匿名函数(函数表达式)#

  • js中的匿名函数就是没有名字的函数,用的很少
  • 语法就是用一个变量接收函数,注意function关键字后面不要加函数名,因为这是匿名函数
var res = function (){
    console.log('1111')
}
res()

【5】arguments对象#

  • js中的arguments对象是一个特殊的对象,实际上是当前函数的一个内置属性
  • arguments对象会接收所有实参
  • length属性可以获取参数的个数
// 判断参数个数是否正确

function index(a,b,c){
    if (arguments.length>3){
        console.log('参数传多了')
    }else if(arguments.length<3){
        console.log('参数传少了')
    }else {
        console.log(a,b,c)
    }

}

index(3,2,3)

【5】箭头函数#

  • 语法:var func = v => v

    等价于

    var func = function(v){

    ​ return v

    }

  • =>想象成一个箭头,箭头左边的是形参,右边的是返回值

  • 箭头函数也可以加多个形参

  • 箭头函数主要用于简单的业务逻辑,类似于python中的匿名函数

【6】函数的全局变量和局部变量#

  • 在JavaScript中,变量的作用域分为全局作用域和局部作用域。全局作用域中声明的变量在整个脚本中都可见,而局部作用域中声明的变量只在其所在的函数内部可见。
  • 全局变量是在任何函数外部声明的变量,它可以被整个脚本中的任何地方访问。
var globalVar = 10;

function someFunction() {
    console.log(globalVar); // 可以在函数内部访问全局变量
}

console.log(globalVar); // 在函数外部也可以访问全局变量
  • 局部变量是在函数内部声明的变量,它只能在声明它的函数内部访问。
function someFunction() {
    var localVar = 20;
    console.log(localVar); // 可以在函数内部访问局部变量
}

// console.log(localVar); // 试图在函数外部访问局部变量会导致错误

【7】作用域#

  • js的作用域查找顺序和python一样

  • 都是局部>全局>内置

  • 一下有几个例子

var city = "BeiJing";
function f() {
  var city = "ShangHai";
  function inner(){
    var city = "ShenZhen";
    console.log(city);
  }
  inner();
}

f();  //输出结果是?
var city = "BeiJing";
function Bar() {
  console.log(city);
}
function f() {
  var city = "ShangHai";
  return Bar;
}
var ret = f();
ret();  // 打印结果是?
var city = "BeiJing";
function f(){
    var city = "ShangHai";
    function inner(){
        console.log(city);
    }
    return inner;
}
var ret = f();
ret();

内置对象和方法

  • 在js中一切皆对象,对象是拥有属性和方法的数据

【1】自定义对象#

  • js的对象(object)本质上就是键值对的集合,但是只能用字符串作为键
  • 因为是对象,所以取值只需要对象.属性就行
  • 也可以向python一样使用[]的格式取值,注意js里面没有get方法
var obj = {'name': 'green', 'age': 21}
console.log(typeof obj) // object
console.log(obj.name) // green
-- 遍历对象中的内容
var obj = {'name': 'green', 'age': 21}
for (var i in obj){
    console.log(obj[i])
}

【2】创建对象#

  • 直接使用{}来创建一个空对象,在初始化对象时也可以直接指定里面的键值对
var info = {'name':'hqq','age':18}
  • 通过构造函数new创建对象
-- 创建对象
var person = new Object()
person.name = 'hqq'
person.age = '21'
console.log(person) // { name: 'hqq', age: '21' }

-- 在构造函数内部 this指向即将创建的新对象
function Person(name, age) {
    this.name = name
    this.age = age
}

var person = new Person(name = 'hqq', age = 18)
console.log(person) // Person { name: 'hqq', age: 18 }

【3】属性访问#

  • 直接使用对象加.访问属性
function Person(name, age) {
    this.name = name
    this.age = age
    this.info = function () {
        console.log(`my name is ${this.name},my age is ${this.age}`)
    }
}
var person = new Person(name = 'hqq', age = 18)
person.info()

【4】索引式访问#

  • 就像python的字典一样,通过在对象后面加上[],在里面写上键从而访问值
function Person(name, age) {
    this.name = name
    this.age = age
    this.info = function () {
        console.log(`my name is ${this.name},my age is ${this.age}`)
    }
}
var person = new Person(name = 'hqq', age = 18)
console.log(person['name']);

【5】for in 遍历数组#

function Person(name, age) {
    this.name = name
    this.age = age
    this.info = function () {
        console.log(`my name is ${this.name},my age is ${this.age}`)
    }
}
var person = new Person(name = 'hqq', age = 18)

for(let key in person){
    console.log(person[key])
}

日期对象Date

  • JavaScript中的日期对象(Date object)用于处理日期和时间。
  • 它提供了处理日期、时间和相关操作的方法。

【1】创建日期对象#

-- 创建当前日期和时间
var date = new Date() // 2024-02-21T09:13:58.447Z

-- 指定字符串日期参数
var date = new Date('2002/7/23 6:16')
var data1 = new Date(2002,7,23,10,2)

-- 转时间格式
data.toLocaleString() // 2002/7/23 18:18:00
data.toLocaleTimeString() // 18:18:00
data.toLocaleDateString() // 2002/7/23
  • Date对象的方法
var d = new Date(); 
//getDate()                 获取日
//getDay ()                 获取星期
//getMonth ()               获取月(0-11)
//getFullYear ()            获取完整年份
//getYear ()                获取年
//getHours ()               获取小时
//getMinutes ()             获取分钟
//getSeconds ()             获取秒
//getMilliseconds ()        获取毫秒
//getTime ()                返回累计毫秒数(从1970/1/1午夜)
  • 小练习 将当前日期按“2017-12-27 11:11 星期三”格式输出。
function showTime() {
    var date = new Date()
    var dic = {
        '1': '星期一',
        '2': '星期二',
        '3': '星期三',
        '4': '星期四',
        '5': '星期五',
        '6': '星期六',
        '7': '星期天',
    }
    var year = date.getFullYear()
    var month = date.getMonth()
    var dat = date.getDate()
    var week = dic[date.getDay()]
    var hours = date.getHours()
    var min = date.getMinutes()
    console.log(year + '-' + (month + 1) + '-' + dat + ' ' + hours + ':' + min + ' ' + week)
}

JSON对象

  • 在python中有序列化和反序列化
  • 在js中也有序列化和反序列化
-- 序列化stringify
var obj = {'name': 'hqq', 'age': 18}
var res1 = JSON.stringify(obj)
console.log(res1) // {"name":"hqq","age":18}

-- 反序列化parse
var res2 = JSON.parse(res1)
console.log(res2) // { name: 'hqq', age: 18 }

RegExp对象

  • 正则表达式(Regular Expression)是一种用来匹配、查找和操作字符串的工具。
  • 在Python中如果需要使用正则 需要借助于re模块
  • 在JavaScript中,我们可以使用RegExp对象来创建和操作正则表达式。

【1】方式一#

let reg = new RegExp('正则表达式')

【2】方式二#

let reg2 = /正则表达式/

【3】正则方法介绍#

test()#

  • 测试字符串是否匹配正则表达式,返回布尔值
let res = reg1.test('正则表达式')
console.log(res) // true

exec()#

  • 在字符串中搜索匹配正则表达式的内容,并且返回结果数组
  • 如果没有匹配的内容则返回null
var str = "Hello world!";
var regex = /Hello (\w+)/;

var result = regex.exec(str);
console.log(result);
// ["Hello world", "world"]

作者:Esofar

出处:https://www.cnblogs.com/Hqqqq/p/18092674

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   HuangQiaoqi  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示