学习JavaScript基础
admin
2024-04-13 13:51:17
0

JavaScript基础

JavaScript简介

  • 什么是javascript?

    JS是一种脚本, 动态, 弱类型语言. 基于在网页上实现复杂功能而产生的语言.

    虽然JS做为开发web页面的脚本语言而出名. 但是如今已被用到了很多非浏览器环境当中, 比如NodeJS, Apache, Electron, Frida.

    • 动态语言意味着JS不需要提前声明变量的类型;
    • 弱类型意味着JS可以隐式地转换类型;
  • JavaScript可以做什么?

    • 操作页面
    • 响应网页发生的事件
    • 数据处理
    • 胶水语言, 连接各种语言环境.
  • Java和JavaScript有什么关系?

    雷锋和雷峰塔的关系. 除了语法相似以外, 几乎没有任何关系.

  • JavaScript和JQuery有什么关系?

    JQuery其实是JS的一个框架, 它封装了很多原生函数, 提供了更丰富的函数库. VueReact等框架也是同样的道理, 只是它们在高度封装的过程中, 发展出了自己的抽象内涵.

运行环境

  • 浏览器页面内

    浏览器为什么可以直接运行js

    在浏览器内核中提供了JS引擎, 所以可以直接执行JS. 该JS引擎只是浏览器的一个线程, 用来执行js.

  • 浏览器页面外

    本质就是封装了浏览器内核当中的JS引擎, 达到了浏览器外运行JS的目的.

    • Node.Js
    • PyV8

环境搭建

  • 安装Node.js

    https://nodejs.org/en/
    
  • 安装IDE

    https://www.jetbrains.com/webstorm/
    
  • 配置IDE

    File -> Settings -> Language&Frameworks -> Node.js and NPM
    

变量声明

  • 可变变量

    声明一个可变变量

    var a = 1;
    let b = 2;
    
    • let和var的区别

      • var不会引起变量作用域的改变

        a = 1
        function foo(){console.log(a)
        }// var a;
        let a;
        
      • let只在代码块区域中有效

        function foo(){{var a = 1;let b = 2;}console.log(a);console.log(b);
        }foo()
        
  • 不可变变量/常量

    const NAME = "tunan"
    NAME = "chihai"
    

函数声明

  • 普通函数

    • 关键字是function

    • 函数体在代码块{}中声明

    • 每一句语句结束以;结尾

      let minNum = 20;
      let maxNum = 90;
      // 0~maxNum之间的整数
      parseInt(Math.random()*maxNum)// minNum ~ (maxNum+minNum)之间的整数
      parseInt(Math.random()*maxNum) + minNum// minNum ~ maxNum之间的整数
      parseInt(Math.random()*(maxNum-minNum)) + minNumfunction randInt(minNum, maxNum){return parseInt(Math.random()*(maxNum-minNum)) + minNum
      }
      

      如果需要做到像python那样闭区间, 需要对(maxNum-minNum) + 1

  • 匿名函数

    (function(minNum, maxNum){console.log(parseInt(Math.random()*(maxNum-minNum)) + minNum)
    })
    
    • 调用匿名函数

      (function(minNum, maxNum){console.log(parseInt(Math.random()*(maxNum-minNum)) + minNum)
      })(20 ,90)
      
  • 构造函数

命名规范

  • 变量和函数都是使用小驼峰命名法

    let myVariable = 1
    
  • 常量使用大写

    CONST MAX_NUM = 1000
    
  • 类和构造函数使用大驼峰命名法

    function Dog(){this.color = 'black'
    }
    
  • 私有属性用_表示

    function Dog(){this.color = 'black'this._owner = 'tunan'
    }
    
  • 注释

    • 单行注释

      // .....
      
    • 多行注释

      /* ... */
      

基本数据类型

  • 6种原始类型

    • undefined

      typeof False
      "undefined"     // 返回undefined的原因是js当中false是小写, False的话就变成了一个变量. 没有赋值声明的变量, 默认会指向undefined
      
    • boolean(布尔类型)

      typeof false
      typeof true
      
    • number

      typeof 1
      typeof 1.0
      
    • Bigint

      typeof 1n
      
    • String(字符串)

      typeof '1'
      
    • Symbol(符号)

      了解即可

      let a = Symbol(1)
      let b = Symbol(1)a === b
      
  • Object

    一种类似字典, 用键对值表示属性关系的数据类型. 键是字符串或者Symbol, 值可以是任意值.

    let obj = {undefined: 1, false:2, 1:3, 1n:4, '1':5}// 正确赋值Symbol的方法
    let a = Symbol(1)
    obj[a] = 6
    
    • null

      • null和undefined有什么区别?

        null表示一个空指针.  undefined表示"无" 这样的一个值.
        
  • Function

基本数据结构

  • 对象

    表面像字典, 但本质和python中的类相似, 里面的键对值相当于python类中的类属性

    • 直接声明

      let obj = {undefined: 1, false:2, 1:3, 1n:4, '1':5}
      
    • 通过New一个对象

      function Dog(){this.color = 'black'
      }new Dog()   // 返回了一个对象
      
  • 数组

    类似python中的list, 但是扩容机制有区别

    • 声明一个数组

      let myArray = [1, 2]myArray[3] = 'a'
      
    • Uint8Array

      表示8位无符号整型数组, 表示0~255.

      new Uint8Array(length)
      
    • Uint16Array

    • Uint32Array

  • Map

    可以认为是有序的字典

    let myMap = new Map()
    
    • Map和HashMap(字典)的区别?
      • 对象可能通过继承关系获取自带的一些属性, 而Map不会.
      • Map提供了很多字典常用功能.
  • Set

    let mySet = new Set()
    mySet.add(1)
    

数据类型的CRUD操作

  • 字符串

    • Create

      • 声明一个字符串

        let myString = "abcdefg"// 可以包含换行符等空白字符
        let myString = `abcdef
        g`
        
      • 合并两个字符串并返回一个新的字符串

        let myString2 = '1234567'
        let myString3 = myString + myString2
        
    • Retrieve

      • 获取当前字符串的长度

        myString.length
        
      • 通过索引值获取单个字符

        myString[index]
        
      • 通过索引值获取一段范围内的字符串

        myString.slice(start, end)
        
      • 获取某个元素的索引值

        myString.indexOf(value)// 如果不存在该元素, 则返回-1
        // 对-1进行位取反后得到的是0, 代表false
        if (~myString.indexOf(value){....
        }
        
    • Update

      • 替换目标字符串

        // 只会替换掉它最先找到的元素
        myString.replace(value_1, value_2)// 替换掉所有匹配的子字符串
        myString.replaceAll(value_1, value_2)
        
      • 大小写转换

        // 转为大写
        myString.toUpperCase()
        // 转为小写
        myString.toLowerCase()
        
    • Delete

      pass

    • 字符串格式化

      `get myString => ${myString}`
      
  • 数组(Array)

    • Create

      • 复制一个数组

        let myArray = [1, 2, 3, 4]
        let myArray2 = myArray
        console.log(myArray === myArray2)
        myArray2 = Array.from(myArray)
        console.log(myArray === myArray2)
        
      • 合并两个数组

        > myArray + myArray2
        // 返回的是字符串拼接的结果
        < "1,2,3,41,2,3,4"// js中合并数组的方法, 返回一个新的数组
        let myArray3 = myArray.concat(myArray2)
        
    • Retrieve

      • 查看当前数组的大小

        myArray.length
        
      • 通过索引值查询单个元素

        myArray[index]// 超过索引范围不会报错, 返回undefined
        myArray[10086]
        
      • 通过索引值获取一定范围内的元素

        myArray.slice(1,3)
        
      • 通过元素获取索引值’

        myArray.indexOf(index)
        
    • Update

      • 通过索引去替换元素

        myArray[0] ='a'// 超过索引范围, 会自动补全empty元素
        myArray[1008] = 'b'
        
      • 添加一个元素至末尾

        myArray.push('c')
        
      • 向指定下标插入元素

        // splice默认用来删除, 如果数量参数为0, 则为添加
        myArray.splice(起始索引, 数量, item)myArray.splice(1, 0, 'd')
        
    • Delete

      • 从末尾删除元素

        myArray.pop()
        
      • 通过索引值删除元素

        myArray.splice(5, 10082)
        
    • 排序

      • 倒序

        myArray.reverse()
        
      • 排序

        // 数组排序是将元素转为string后进行排序
        myArray.sort()
        [10086, 2, 3, 4, "a", "b", "d"]function compare(a, b){if(a < b){return -1}if(a > b){return 1}return 0
        }myArray  = [1, 10087, 2, 9, 4]
        myArray.sort(compare)
        console.log(myArray)
        
  • 对象(Object)

    • Create

      • 合并两个对象, 并返回一个新对象

        let myObj = {"a":1, "b":2}
        let myObj2 = {"c":3, "d": 4}Object.assign(myObj,myObj2)
        
    • Retrieve

      • 获取当前对象所有key

        Object.keys(myObj)
        
      • 获取当前对象所有value

        Object.values(myObj)
        
    • Update

      • 键对值复制

      • Object.definePropery

        Object.defineProperty(navigator, 'webdriver', {value: true, writable:true}) 
        
    • Delelte

      delete myObj.a
      
    • JSON转换

      let jsonData = JSON.stringify(myObj)
      JSON.parse(jsonData)
      

Date模块操作

  • 获取当前时间

    new Date()
    
  • 时间格式化

    new Date().toISOString()
    
  • 获取时间戳

    new Date().getTime() //精确到毫秒
    

相关内容

热门资讯

linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
C++ 机房预约系统(六):学... 8、 学生模块 8.1 学生子菜单、登录和注销 实现步骤: 在Student.cpp的...
A.机器学习入门算法(三):基... 机器学习算法(三):K近邻(k-nearest neigh...
数字温湿度传感器DHT11模块... 模块实例https://blog.csdn.net/qq_38393591/article/deta...
有限元三角形单元的等效节点力 文章目录前言一、重新复习一下有限元三角形单元的理论1、三角形单元的形函数(Nÿ...
Redis 所有支持的数据结构... Redis 是一种开源的基于键值对存储的 NoSQL 数据库,支持多种数据结构。以下是...
win下pytorch安装—c... 安装目录一、cuda安装1.1、cuda版本选择1.2、下载安装二、cudnn安装三、pytorch...
MySQL基础-多表查询 文章目录MySQL基础-多表查询一、案例及引入1、基础概念2、笛卡尔积的理解二、多表查询的分类1、等...
keil调试专题篇 调试的前提是需要连接调试器比如STLINK。 然后点击菜单或者快捷图标均可进入调试模式。 如果前面...
MATLAB | 全网最详细网... 一篇超超超长,超超超全面网络图绘制教程,本篇基本能讲清楚所有绘制要点&#...
IHome主页 - 让你的浏览... 随着互联网的发展,人们越来越离不开浏览器了。每天上班、学习、娱乐,浏览器...
TCP 协议 一、TCP 协议概念 TCP即传输控制协议(Transmission Control ...
营业执照的经营范围有哪些 营业执照的经营范围有哪些 经营范围是指企业可以从事的生产经营与服务项目,是进行公司注册...
C++ 可变体(variant... 一、可变体(variant) 基础用法 Union的问题: 无法知道当前使用的类型是什...
血压计语音芯片,电子医疗设备声... 语音电子血压计是带有语音提示功能的电子血压计,测量前至测量结果全程语音播报࿰...
MySQL OCP888题解0... 文章目录1、原题1.1、英文原题1.2、答案2、题目解析2.1、题干解析2.2、选项解析3、知识点3...
【2023-Pytorch-检... (肆十二想说的一些话)Yolo这个系列我们已经更新了大概一年的时间,现在基本的流程也走走通了,包含数...
实战项目:保险行业用户分类 这里写目录标题1、项目介绍1.1 行业背景1.2 数据介绍2、代码实现导入数据探索数据处理列标签名异...
记录--我在前端干工地(thr... 这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前段时间接触了Th...
43 openEuler搭建A... 文章目录43 openEuler搭建Apache服务器-配置文件说明和管理模块43.1 配置文件说明...