深海 深海
首页
  • 随手笔录
  • 电影
  • 音乐
  • 书籍
汇总
面试
  • 开发工具
  • VScode插件
  • Git
  • Mac时代
  • 前端工具
  • Chrome
  • HTML
  • CSS
  • Javascript
  • Typescript
  • Axios
  • 框架

    • Vue
    • uni-app
  • Nginx
  • Linuk
事例
关于

深海

人生如逆旅,我亦是行人
首页
  • 随手笔录
  • 电影
  • 音乐
  • 书籍
汇总
面试
  • 开发工具
  • VScode插件
  • Git
  • Mac时代
  • 前端工具
  • Chrome
  • HTML
  • CSS
  • Javascript
  • Typescript
  • Axios
  • 框架

    • Vue
    • uni-app
  • Nginx
  • Linuk
事例
关于
  • HTML
  • CSS的奥秘

  • JavaScript

    • 基础
    • 文档对象模型
    • 浏览器对象模型
    • 常用知识点
      • 你不知道的console
      • 判断终端设备
      • var、let、const的区别
      • 对象合并
      • 箭头函数和普通函数区别
      • export暴露的三种方式
      • 搞懂client、offset、page、screen区别
      • 闭包
    • Promise
  • TypeScript

  • Vue

  • uni-app

  • 前端
  • JavaScript
深海
2023-03-30
目录

常用知识点

# 你不知道的console

  • 打印调试信息
console.debug('debug');
1
  • 打印警告
console.warn('This is a warn');
1
  • 打印错误
console.error('This is a error');
1
  • 清空消息
console.log(1);
console.clear();
console.log(2);
1
2
3
  • 给消息添加样式
const style = `
  color:red;
  background:black
`
console.log('%c你好',style)
1
2
3
4
5
  • 打印消息
// 1.普通消息
console.log('console');

// 2.信息
console.info('info');

// 3.表格
const table = [
  { name: '张三', age: 20},
  { name: '李四', age: 23}
]
console.table(table);

// 4.分组
const label = 'This is label'
console.group(label)           // 分组展开
console.groupCollapsed(label)  // 分组关闭
console.log('first log');
console.log('second log');
console.groupEnd(label)

// 5.对象结构
function fn(){}
console.dir(fn);
console.dir(document.body);

// 6.计时 测量一个javascript脚本程序执行消耗的时间
// 启动计时器
console.time('loop')
// 测试用代码
// 停止计时,输出时间
console.timeEnd('loop')

// 7.计数
function fn(){
    // 输出一个计数器,标识了代码块被执行的次数
    console.count('loop')
}
fn();
fn();
// 重置指定标签的计数器
console.countReset('loop')

// 8.堆栈
function a(){
    b();
}
function b(){
    console.trace();
}
a();

// 9.断言
function sum(a,b){
    return a + b;
}
// 当为false的时候报错
console.assert(sum(1,2) === 4);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58

# 判断终端设备

function getClient() {
  if (navigator.userAgent) {
      let u = window.navigator.userAgent
      return {
          trident: u.indexOf('Trident') > -1, // IE内核
          presto: u.indexOf('Presto') > -1, // opera内核
          webKit: u.indexOf('AppleWebKit') > -1, // 苹果、谷歌内核
          gecko: u.indexOf('Gecko') > -1 && u.indexOf('KHTML') === -1, // 火狐内核
          mobile: !!u.match(/AppleWebKit.*Mobile.*/), // 是否为移动终端
          ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), // ios终端
          android: u.indexOf('Android') > -1 || u.indexOf('Adr') > -1, // android终端
          iPhone: u.indexOf('iPhone') > -1, // 是否为iPhone或者QQHD浏览器
          iPad: u.indexOf('iPad') > -1, // 是否iPad
          webApp: u.indexOf('Safari') === -1, // 是否web应该程序,没有头部与底部
          weixin: u.indexOf('MicroMessenger') > -1, // 是否微信
          qq: u.match(/\sQQ/i) === 'qq' // 是否QQ
      }
  } else {
    console.log('环境异常')
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

# var、let、const的区别

  • 变量提升

    var具有变量提升的机制,let、const没有变量提升的机制。

  • 重复声明

    var可以多次声明同一个变量,let、const不可以多次声明同一个变量。

  • 指针指向

    • var、let用来声明变量, const表示常量
    • let和var创建的变量是可以更改指针指向(可以重新赋值)。
    • 但const声明的变量是不允许改变指针的指向。
      • 重新为常量对象赋值,可以更改常量对象的属性。
      • 无法重新为常量数组赋值,可以更改常量数组的元素。
  • 块级作用域

    块作用域由 { } 包括

    • var 声明的变量没有自身作用域,let和const声明的变量有自身的作用域。
  • 全局添加属性

    浏览器的全局对象是window,Node的全局对象是global。

    • var声明的变量为全局变量,并且会将该变量添加为全局对象的属性,但是let和const不会。
  • 初始值设置

    • 在变量声明时,var 和 let 可以不用设置初始值。而const声明变量必须设置初始值。
  • 暂时性死区

    • 在使用let、const命令声明变量之前,该变量都是不可用的,称为暂时性死区。使用var声明的变量不存在暂时性死区。

# 对象合并

var obj1 = {a:12,b:20}
var obj2 = {d:30,b:89}
// 1.使用扩展运算符
var obj = {...obj1,...obj2}
// 2.使用Object.assign
var obj = Object.assign(obj1,obj2)
// 3.循环添加
extend(obj1,obj2)
function extend(target,source){
    for(var key in source){
        target[key] = source[key]
    }
    return target;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 箭头函数和普通函数区别

箭头函数语法

()中定义参数,如果只有一个参数,可以不写()  如:x =>{}
{}中定义函数体,如果函数体中只有一个返回值,可以不写return
1
2

普通函数

// 具名函数
function func(){}
// 匿名函数
let fun = function(){}
1
2
3
4
  • 箭头函数都是匿名函数,普通函数可以有匿名函数,也可以有具名函数
  • this指向不同
    • 普通函数的this指向调用它的那个对象
    • 箭头函数的 this 永远指向其上下文的 this ,任何方法都改变不了其指向,如 call() , bind() , apply()
  • 箭头函数不具有 arguments 对象
    • 每一个普通函数调用后都具有一个arguments 对象,用来存储实际传递的参数。但是箭头函数并没有此对象。
  • 箭头函数不能用于构造函数,不能使用new
    • 原因:
      • 箭头函数没有prototype。因此不能使用箭头作为构造函数,也就不能通过new操作符来调用箭头函数。

# export暴露的三种方式

  • 分别暴露
// 可暴露字符串,对象,函数...
export let obj = { city : "北京" }
export const fuc = (value)=>{}
1
2
3
  • 统一暴露
let obj = { city : "北京" }
const fuc =(value)=>{}
export {obj,fuc}
1
2
3
  • 默认暴露
export default {
    obj:{
        student:''
    },
    son(value){},
}
1
2
3
4
5
6
  • 引用
// 1.结构赋值引用
import {obj,fuc} from '@/utils/config'
// 2.通用引用
import * as ex from '@/utils/config'
// 3.只针对默认暴露
import config from './js/export.js'  
1
2
3
4
5
6

# 搞懂client、offset、page、screen区别

  • client
    • 鼠标指针在视口(viewport)中的水平坐标位置。视口通常是指浏览器窗口的可视区域,不包括浏览器的边框、菜单栏、滚动条等
  • offset
    • 鼠标指针相对于事件源元素(触发事件的元素)的左上角的水平偏移量
  • page
    • 鼠标指针在整个文档中的水平坐标位置,包括滚动的部分
    • pageY = clientY + 纵向滚动距离
    • pageX = clientX + 横行滚动距离
  • screen
    • 鼠标指针在用户屏幕上的水平坐标位置

# 闭包

上次更新: 2024/11/13, 19:44:33
浏览器对象模型
Promise

← 浏览器对象模型 Promise→

最近更新
01
TypeScript是什么
06-15
02
项目搭建
05-21
03
Prettier
02-27
更多文章>
Theme by Vdoing | Copyright © 2022-2025 京ICP备2020044002号-4 京公网安备11010502056618号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式