深夜爆肝JS好文! (二)

简介: 笔记

4. new 关键字做了什么?


function Person(){
     this.name = '朱小明';
     this.fn = function(){
         console.log('名字是:' + this.name)
     }
 }
 let person1 = new Person();
  1. 创建一个空的对象
  2. 链接到原型
  3. 绑定this指向,执行构造函数
  4. 确保返回的是对象
  5. 代码来解释一下:
let obj = new Object();
obj.__proto__= Person.prototype;  // 设置原型链
 let result = Person.call(obj);  // 让Person的this指向obj,并执行Person函数体
 // 判断Person的返回值类型:
 // 如果是值类型,返回obj。如果是引用类型,就返回这个引用类型的对象
 if (typeof(result) == "object"){
     person1 = result;
 }
 else{
     person1 = obj;;
 }

默认情况下函数返回值为 undefined,即没有显示定义返回值的话

构造函数例外,new 构造函数在没有 return 的情况下默认返回新创建的对象


5. 原生JS如何实现事件委托?


事件委托就是利用事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件

举个栗子:

有三个同事预计会在周一收到快递。为签收快递,

有两种办法:一是三个人在公司门口等快递;二是委托给前台MM代为签收。

前台MM收到快递后,她会判断收件人是谁,然后按照收件人的要求签收,

甚至代为付款。这种方案还有一个优势,那就是即使公司里来了新员工(不管多少),前台MM也会在收到寄给新员工的快递后核实并代为签收。

具体实现:

<!DOCTYPE html>
<html>
<head>
    <title>事件委托</title>
</head>
<body>
    <ul id="ul">
        <li>0</li>
        <li>1</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>
        <li>5</li>
    </ul>
    <button id="btn">点我添加一个li</button>
</body>
<script>
// 事件委托具体实现
let ul = document.getElementById("ul");
    ul.onclick = function (event) {
        event = event || window.event;
        let target = event.target;
        // 获取目标元素
        if (target.nodeName == 'LI') {
            alert(target.innerHTML);
        }
    }
    // 为按钮绑定点击事件
    let btn = document.getElementById('btn');
    btn.onclick = function () {
        let li = document.createElement('li');
        // 新增li的内容为ul当前子元素的个数
        li.textContent = ul.children.length;
        ul.appendChild(li);
    }
</script>
</html>

6. 手写一个冒泡排序


  • 两个for循环就搞定了
  • 相邻两个比较大小,如果后者比前者小,就交换两者位置,以此类推
let array = [5, 4, 3, 2, 1];
let temp = 0;
for (var i = 0; i <array.length; i++){
  for (var j = 0; j <array.length - i; j++){
    if (array[j] > array[j + 1]){
      temp = array[j + 1];
      array[j + 1] = array[j];
      array[j] = temp;
     }
}

11.png

8. 如何一行代码实现数组去重?


[...new Set([1,2,3,1,'a',1,'a'])]


9. null与undefined有什么区别?


null 是一个表示"无"的对象,转为数值时为 0,布尔值为 false

undefined 是一个表示"无"的原始值,转为数值时为 NaN

当声明的变量还未被初始化时,变量的默认值为 undefined

null 用来表示尚未存在的对象,undefined 表示"缺少值",就是此处应该有一个值,但是还没有定义


12.png

目录
相关文章
|
JSON JavaScript API
|
2月前
|
JavaScript
Node.js【GET/POST请求、http模块、路由、创建客户端、作为中间层、文件系统模块】(二)-全面详解(学习总结---从入门到深化)
Node.js【GET/POST请求、http模块、路由、创建客户端、作为中间层、文件系统模块】(二)-全面详解(学习总结---从入门到深化)
27 0
|
2月前
|
消息中间件 Web App开发 JavaScript
Node.js【简介、安装、运行 Node.js 脚本、事件循环、ES6 作业队列、Buffer(缓冲区)、Stream(流)】(一)-全面详解(学习总结---从入门到深化)
Node.js【简介、安装、运行 Node.js 脚本、事件循环、ES6 作业队列、Buffer(缓冲区)、Stream(流)】(一)-全面详解(学习总结---从入门到深化)
77 0
|
2天前
|
JavaScript 前端开发 测试技术
学习JavaScript
【4月更文挑战第23天】学习JavaScript
10 1
|
10天前
|
JavaScript 前端开发 应用服务中间件
node.js之第一天学习
node.js之第一天学习
|
1月前
|
运维 JavaScript 前端开发
发现了一款宝藏学习项目,包含了Web全栈的知识体系,JS、Vue、React知识就靠它了!
发现了一款宝藏学习项目,包含了Web全栈的知识体系,JS、Vue、React知识就靠它了!
|
1月前
|
JavaScript
Vue.js学习详细课程系列--共32节(4 / 6)
Vue.js学习详细课程系列--共32节(4 / 6)
35 0
|
1月前
|
前端开发 搜索推荐 JavaScript
编程笔记 html5&css&js 001 学习编程从网页开始
编程笔记 html5&css&js 001 学习编程从网页开始
|
2月前
|
前端开发 JavaScript
从零开始学习前端开发:HTML、CSS、JavaScript入门指南
【2月更文挑战第1天】本文将带领读者从零开始学习前端开发,介绍HTML、CSS和JavaScript的基础知识与应用,帮助读者快速入门前端开发领域。
64 1
|
2月前
|
数据采集 机器学习/深度学习 JavaScript
画【Python折线图】的一百个学习报告(二、pyecharts引入js文件)
画【Python折线图】的一百个学习报告(二、pyecharts引入js文件)
51 0