start:开始插入和(或)删除的数组元素的下标。
delectCount:从start开始,包括start所指的元素在内要删除的元素个数。这个参数是可选的,如果没有指定它,splice()将删除从start开始到原数组结尾的所有元素。
value , … :要插人数组的零个或多个值,从start所指的下标处开始插入。
splice(2,1 )表示删除一个数组下标为2的内容
如果要改变数组,通过item和index,arr改变
fn():调用函数。调用之后,还获取了函数的返回值。
fn:函数对象。相当于直接获取了整个函数对象。
当我们不确定有多少个参数传递的时候,可以用 arguments 来获取。在 JavaScript 中,arguments 实际上是当前函数的一个内置对象。所有函数都内置了一个 arguments 对象(只有函数才有 arguments 对象),arguments 对象中存储了传递的所有实参.
arguments的展示形式是一个伪数组。伪数组具有以下特点:
可以进行遍历;具有数组的 length 属性。
按索引方式存储数据。
不具有数组的 push()、pop() 等方法。
我们在《JavaScript 基础/函数.md》这篇文章讲过,函数的调用有六种形式。
根据函数的调用方式的不同,this 会指向不同的对象:
1.以函数的形式(包括普通函数、定时器函数、立即执行函数)调用时,this 的指向永远都是 window。比如fun();相当于window.fun();
2.以方法的形式调用时,this 指向调用方法的那个对象
3.以构造函数的形式调用时,this 指向实例对象
4.以事件绑定函数的形式调用时,this 指向绑定事件的对象
5.使用 call 和 apply 调用时,this 指向指定的那个对象
call() 方法的作用:可以调用一个函数,与此同时,它还可以改变这个函数内部的 this 指向。
call() 方法的另一个应用:可以实现继承。之所以能实现继承,其实是利用了上面的作用。
var obj1 = {
nickName: ‘qianguyihao’,
age: 28,
};
function fn1(a) {
console.log(this);
console.log(this.nickName);
console.log(a);
}
fn1.apply(obj1, [‘hello’]); // 先将 this 指向 obj1,然后执行 fn1() 函数
const maxValue = Math.max.apply(Math, arr1); // 求数组 arr1 中元素的最大值
不会调用函数,但是可以改变函数内部的 this 指向。
闭包(closure):指有权访问另一个函数作用域中变量的函数。
上面这个概念,出自《JavaScript 高级程序设计(第 3 版)》这本书。上面的概念中指出,闭包是一种函数;当然,你可以把闭包理解成是一种现象。具体解释如下。
简单理解就是:如果这个作用域可以访问另外一个函数内部的局部变量,那就产生了闭包(此时,你可以把闭包理解成是一种现象);而另外那个作用域所在的函数称之为闭包函数。注意,这里强调的是访问局部变量哦
浅拷贝:只拷贝最外面一层的数据;更深层次的对象,只拷贝引用。传址
1)for in逐个拷贝
2)assign语法糖
深拷贝:拷贝多层数据;每一层级别的数据都会拷贝。
总结:
拷贝引用的时候,是属于传址,而非传值。关于传值和传址的区别,是很基础的内容,详见《JavaScript 基础/对象简介.md》这篇文章。
深拷贝会把对象里所有的数据重新复制到新的内存空间,是最彻底的拷贝。
获取元素方式
document.getXX
事件三要素
事件源 按钮
事件类型 点击
事件处理程序 函数
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<button id="btn">唐伯虎</button>
<script>
var btn = document.getElementById('btn')
btn.onclick =function(){
alert("点秋香")
}
</script>
</body>
</html>
/ 描述
// 请将下面这句话以段落的形式展示在浏览器中——“牛客网是一个专注于程序员的学习和成长的专业平台。”
// 给定代码:
// html:
// 牛客网是一个专注于程序员的学习和成长的专业平台。
// 综合讨论区各大佬的解法整理如下:
// 解法1 HTML简单实现
<p>牛客网是一个专注于程序员的学习和成长的专业平台。</p>
// 解法2 JS实现 修改给定的HTML代码,定位body并用带p标签的文本代替原文本
let body = document.getElementsByTagName("body")[0];
body.innerHTML = body.innerText.replace("牛客网是一个专注于程序员的学习和成长的专业平台。","牛客网是一个专注于程序员的学习和成长的专业平台。
");
// 解法3 JS实现 获取给定HTML代码中的文本,删除原子节点,给获取的文本加上p标签,然后插入页面
const pInnerText = document.body.childNodes[0].textContent.trim();
document.body.removeChild(document.body.childNodes[0]);
const p = document.createElement('p');
p.innerHTML = pInnerText;
document.body.appendChild(p);
// 解法4 JS实现 创建一个p标签,嵌入到body中,缺点是没有删除给定的不带p标签的文本
let p = document.createElement("p");
p.innerText = "牛客网是一个专注于程序员的学习和成长的专业平台。";
document.body.append(p);
// document.querySelector("body").append(p);
// body不需要selector,直接document.body就可以了
// 解法5 JS使用document.write,缺点是没有删除给定的不带p标签的文本
document.write('牛客网是一个专注于程序员的学习和成长的专业平台。
');