首页 > 其他分享 >JS基础

JS基础

时间:2023-04-03 14:48:04浏览次数:33  
标签:console log 基础 JS 数组 var document 请求

console.log() 控制台输出

alert() 对话框

confirm() 确认框

prompt("文本",“默认输入文本”) 输入框

parseFloat() 将字符串转换为浮点型

parseInt() 将字符串转换为整型

number object undefined
NaN null undefined

自定义函数 function 函数名(params) {}

调用函数 事件名=“函数名()”

匿名函数 function(){}

数据类型

  • 基本数据类型:字符串(string)、数字(number)、布尔(boolean)、空(null)、未定义(undefined)。
  • 引用数据类型:Array、Object、Date、RegExp。

全等(===) 当全等号左右两边的操作数相等且类型相同时,返回 true。

字符串 repeat() 构造并返回一个新字符串

str.repeat(count)

判断对象为空

function isEmptyObject(obj) {
for (let o in obj) {
   return false;
}
return true;
}
  • keys() 返回 Map 对象中键的数组。
  • values() 返回 Map 对象中值的数组。

对象转换为数组 Object.keys()

function isEmptyObject(obj) {
	return Object.keys(obj).length === 0;
}
//但是如果传入null或undefined会出问题
isEmptyObject(null); // Uncaught TypeError: Cannot convert undefined or null to object
isEmptyObject(undefined); // Uncaught TypeError: Cannot convert undefined or null to object
//在实际项目中,如下方式使用
function isEmptyObject(obj) {
return Object.keys(obj || []).length === 0;
}

对象转为 JSON 字符串 JSON.stringify()

function isEmptyObject(obj) {
   return JSON.stringify(obj) === "{}";
}

运算符与表达式

  • 算术运算符:+、-、*、/、%、++、--
  • 比较运算符:>、<、>=、<=、、!=、=、!==
  • 赋值运算符:=、+=、-=、*=、/=
  • 逻辑运算符:&&、||、!
  • 条件运算符:条件表达式 ? 表达式 1 : 表达式 2

DOM文档对象模型

Document Object Model(文档对象模型),它是浏览器为每个窗口内的 HTML 页面创建的一个 document 对象来对页面的元素进行操作。

DOM获取元素对象

document.getElementById()

document.getElementsByTagName()

document.getElementsByClassName()

选第一个 document.getElementsByClassName('xxx')[0]

document.getElementsByName()

document.querySelector()

document.querySelectorAll()

获取到的是一个类数组对象NodeList ,并非数组,所以无法使用indexOf()之类的方法。

image-20230403142043260

[...document.querySelectorAll(".tabs>div")]
将其转换为数组进行处理

document.write()

DOM事件 ! ! !

HTML DOM 事件对象 | 菜鸟教程 (runoob.com)

事件监听与移除

.addEventListener("click",function(){});
.removeEventListener()

鼠标事件

onclick	鼠标点击事件
onmouseover	鼠标移入事件
onmouseout	鼠标移出事件
onmousedown	鼠标按下事件
onmouseup	鼠标松开事件
onmousemove	鼠标移动事件

键盘事件

onkeydown 键盘按下会触发的事件
onkeyup 键盘松开会触发的事件

表单事件

onfocus	表单元素聚焦时触发
onblur	表单元素失焦时触发

DOM元素对象属性和方法

元素的新增,删除

.createTextNode();   创建文本的节点
.createElement("tr");   创建元素<tr>
.appendChild()  添加节点
.removeChild()  删除节点
    <div id="box">
        <input type="text" id="txt">
        <button onclick="add()">添加</button>
        <p id="p1">这是一个段落。</p>
        <p id="p2">这是另外一个段落。</p>
    </div>
    <script>
        function add() {
            var txtName = document.getElementById("txt").value;
            let txt = document.createTextNode(txtName);
            var para = document.createElement("p");
            para.appendChild(txt);
            var box = document.getElementById("box");
            box.appendChild(para);
        }
        var parent = document.getElementById("box");
        var child = document.getElementById("p1");
        parent.removeChild(child); //删除父元素中的子元素
    </script>

操作元素内容

.innerHTML  会覆盖掉之前的
.innerText

以上两个以及document.write()的差别

document.write是直接将内容写入页面的内容流,会导致页面全部重绘,innerHTML将内容写入某个DOM节点,不会导致页面全部重绘

image-20221017212023387

操作元素内容属性

.src
.href
.getAttribute()

操作表单属性

.value	更换表单内容
.disabled	表单是否可用,默认false

操作样式属性

.className
.classList.add("样式名")
.classList.remove("样式名")
.style.样式

内置对象

RegExp

// g 全局模式
// i 不区分大小写
// m 多行模式?
//字面量形:由斜杠 (/) 包围
let reg1 = /[bc]at/i;       
// 匹配第一个"bat"或"cat",不区分大小写,这里的元字符是有特殊含义,表示其中可以匹配其中任意的字符
let reg2 = /\[bc\]at/i;     // 匹配第一个" [bc]at",不区分大小写
let reg3 = /.at/gi;         // 匹配所有以"at"结尾的 3 个字符的组合,不区分大小写
let reg4 = /\.at/gi;        // 匹配所有".at",不区分大小写

//构造函数
let reg2 = new RegExp("[bc]at", "i");  
//test()方法
let reg = new RegExp("e");
reg.test("The best things in life are free");//true

//exec() 方法
var text = "cat, bat, sat, fat";
var pattern2 = /.at/g;
var matches = pattern2.exec(text);   
// 返回数组 ["cat", index: 0, input: "cat, bat, sat, fat", groups: undefined]
alert(matches.index);                // 0
alert(matches[0]);                   // cat
alert(pattern2.lastIndex);           // 3

var text = "this has been a short summer";
var pattern = /(..)or(.)/g;
if (pattern.test(text)){
    alert(RegExp.$1);           // sh
    alert(RegExp.$2);           // t
}

数组对象Array

var 数组名 = new Array(元素1, 元素2,...,元素n);
var 数组名 = [元素1, 元素2,...,元素n];

.length 获取数组长度

new Array(word.length)生成word.length长度的数组,再fill('*')代表将数组内的元素全部设置为symbol的值,再调用join转换为字符串

new Array(长度为五).fill('*').join('')  //*****

常用方法:

  • slice(x,y) 数组切片下标

    • 将数组按照置顶个数分割

        const splitArray = (oldArr, num) => {
          oldArr.sort((x, y) => x - y);
          let res = [];
          for (let i = 0; i < oldArr.length; i += num) {
            console.log(i);
            console.log(i + num);
            res.push(oldArr.slice(i, num + i));
          }
          return res;
        };
        console.log(splitArray([22, 45, 13, 25, 6, 5, 10, 76, 15, 34, 66, 1], 5));
      
  • unshift() 数组头部增加新元素

  • shift() 删除数组首元素

  • sort() 对元素排序

    • 是按照ASCII码顺序排序,适用于字母,但不适用于数字,所以不直接使用sort()进行排序

      arr1.sort([22, 45, 13, 25, 6, 5, 10, 76, 15, 34, 66, 1]) 会发现从小到大排序错误

      reverse() 逆序排列

      对数值进行排序

      oldArr.sort((x, y) => x - y); 正序排序

      oldArr.sort((x, y) => y - x); 倒序排序

  • pop() 删除并返回数组的最后一个元素

  • push() 像数组末尾添加一个元素,并返回新的长度

  • indexOf() 查找元素的下标值

  • splice() 置顶下标位置添加或删除元素

    • splice(index) 从index的位置开始,删除之后的所有元素(包括第index个)

    • splice(index,个数) 删除从index位置开始的数

    • 参数大于三个...

      splice(元素下标, 删除元素个数(可以为0), 要添加的元素(可以不写))
      
  • concat() 合并多个数组,返回新数组

  • join() 把数组的所有元素放入一个字符串并返回该字符串。可以指定间隔符

  • includes(元素) 判断该数组中是否包含某个元素

  • 数组名.toString() 数组转换为字符串并返回结构

var a = new Array();
var b = new Array();
a = [2,9,6]
b = [3,8]
console.log(a)
console.log(a.concat(b))
console.log(a.join("-"))
console.log(a.pop())
console.log(a.push(3))
console.log(a.reverse())
console.log(a.sort())
console.log(a.toString())

image-20221006150609241

array.map()方法

array.map(function(item,index,arr), thisValue)

返回一个新数组,不会改变原有数组

  • item:数组每一项 (必须)
  • index:每项索引 (可选)
  • arr:数组本身 (可选)
  • thisValue:修改循环时的this指向,默认全局对象 (可选)
  //值   索引   数组本身
  let newArr = arr.map((val, index, array) => {
    console.log(val);
    console.log(index);
    console.log(array);
  });

结合Array.from使用

定义数组长度,然后自增,就能指定自增或自减

console.log(Array.from({ length: 4 }).map((item, i) => i + 1)); //[1, 2, 3, 4]
console.log(Array.from({ length: 4 }).map((item, i) => 4 - i)); // [4, 3, 2, 1]

遍历该数组,并处理数据

需要返回新数组时使用,否则请用请用forEach或者forof替代

  let list = [
    { name: "张三", age: 18 },
    { name: "李四", age: 19 },
    { name: "王五", age: 20 },
    { name: "老六", age: 66 },
  ];
  newArr = list.map((obj) => obj.name).join(",");
  console.log(newArr);

array.filter() 方法

array.filter(function(currentValue,index,arr), thisValue)

array.reduce()方法

reduce() 方法对数组中的每个元素按序执行一个由您提供的 reducer 函数,每一次运行 reducer 会将先前元素的计算结果作为参数传入,最后将其结果汇总为单个返回值。

计算数组中元素出现个数

  let names = ["Alice", "Bob", "Tiff", "Bruce", "Alice"];
  let countedNames = names.reduce(function (allNames, name) {
    if (name in allNames) {
      allNames[name]++;
    } else {
      allNames[name] = 1;
    }
    return allNames;
  }, {});
  console.log(countedNames);

根据属性对Obj进行分类

  let people = [
    { name: "Alice", age: 21 },
    { name: "Max", age: 20 },
    { name: "Jane", age: 20 },
  ];
  function groupBy(objectArray, property) {
    return objectArray.reduce(function (acc, obj) {
      let key = obj[property];
      if (!acc[key]) {
        acc[key] = [];
      }
      acc[key].push(obj);
      return acc;
    }, {});
  }
  let groupedPeople = groupBy(people, "age");

JSON对象

JSON.stringify()

JSON.parse()

  let data = [
    {
      id: 1001,
      title: "让我们一起写一个前端监控系统吧!",
      replayCount: 14,
      clickCount: 3612,
    },
    {
      id: 1002,
      title: "花了一天的时间,地板式扫盲了vue3所有API盲点",
      replayCount: 21,
      clickCount: 9812,
    },
    {
      id: 1003,
      title: "我被骂了,但我学会了如何构造高性能的树状结构

标签:console,log,基础,JS,数组,var,document,请求
From: https://www.cnblogs.com/naitiam/p/17282967.html

相关文章

  • js---局部打印功能
    最近在开发一个项目,需要用到PC端打印的功能,很多都会去引入一个第三方的JS来做,其实打印功能很简单,调用浏览器的打印功能就可以实现。代码示例:<!doctypehtml><htmllang="en"><head><metacharset="UTF-8"><title>打印</title></head><body><buttonclas......
  • MySQL(免安装版)下载,安装,配置环境变量【0基础小白用】
    安装版和免安装版的区别:1.安装版自动帮你配置完成,也有安装引导,上来就能用。2.免安装版可在你自己需要的目录中解压,然后手动配置my.ini,配置环境变量,初始化数据库,配置账号密码,比较灵活,但是新人配置需要查看教程。1,下载https://dev.mysql.com/downloads/mysql/注意有32位和64位......
  • 全网最详细中英文ChatGPT-GPT-4示例文档-复杂函数快速转单行函数从0到1快速入门——官
    目录Introduce简介setting设置Prompt提示Sampleresponse回复样本APIrequest接口请求python接口请求示例node.js接口请求示例curl命令示例json格式示例其它资料下载ChatGPT是目前最先进的AI聊天机器人,它能够理解图片和文字,生成流畅和有趣的回答。如果你想跟上AI时代的潮流......
  • js mouse drag or click
    onmousedown鼠标按下触发事件onmousemove鼠标按下时持续触发事件onmouseup鼠标抬起触发事件click点击事件=mouseup+mousedowndrag拖拽=mousedown+mousemove+mouseup//之后我们可以根据点击的位置或者时间来判定是点击还是拖拽......
  • vue.js 监听器~~~
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><metaname="viewport"content="width=devic......
  • Rust语言 学习01 简介 && 基础
    ......
  • js数组详解(四):排序API
    1.排序:   自定义排序:冒泡  排序API:arr.sort();    大问题:默认将所有元素转为字符串再按字符串排列         只能对字符串类型的元素正确排序    解决:自定义比较规则:      比较器函数:专门比较任意两值大小的......
  • layui和vue.js和jq一起使用调用vue方法及变量
    <divclass="layui-rowlayui-col-space15"id="app"></div>定义vueApp:letvueApprequire(['vue'],function(Vue){vueApp=newVue({el:"#app",data:{where......
  • ​openEuler 23.03 正式发布,聚集社区创新力量,增强基础技术能力,协同全场景创新
    3月31日,openEuler23.03创新版本正式发布。openEuler作为一个凝聚全球开发者的创新平台,持续在多样性算力、基础技术、全场景和生态服务等方向持续创新。openEuler23.03是社区最新发布的创新版,版本代码总计7.3亿行,相比openEuler22.09,新增代码5500万行,新增代码主要集中......
  • 3d基础 - 从模型坐标到屏幕坐标
    在3D引擎中,场景通常被描述为三维空间中的模型或对象,每个模型对象由许多三维顶点组成。最终,这些模型对象将在平面屏幕上呈现和显示。渲染场景始终相对于摄像机,因此,还必须相对于摄像机的视图定义场景的顶点。了解一下这个转换过程是相当有必要的。上图中,point为正方体的一个顶......