深夜爆肝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
|
28天前
|
JavaScript 前端开发
JavaScript中的原型 保姆级文章一文搞懂
本文详细解析了JavaScript中的原型概念,从构造函数、原型对象、`__proto__`属性、`constructor`属性到原型链,层层递进地解释了JavaScript如何通过原型实现继承机制。适合初学者深入理解JS面向对象编程的核心原理。
25 1
JavaScript中的原型 保姆级文章一文搞懂
|
5月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
103 2
|
24天前
JS+CSS3文章内容背景黑白切换源码
JS+CSS3文章内容背景黑白切换源码是一款基于JS+CSS3制作的简单网页文章文字内容背景颜色黑白切换效果。
17 0
|
5月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的小区物流配送系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的小区物流配送系统附带文章源码部署视频讲解等
146 4
|
5月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的宠物援助平台附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的宠物援助平台附带文章源码部署视频讲解等
89 4
|
5月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的宠物交易平台附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的宠物交易平台附带文章源码部署视频讲解等
79 4
|
5月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的大学生入伍人员管理系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的大学生入伍人员管理系统附带文章源码部署视频讲解等
99 4
|
5月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp宿舍管理系统的附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp宿舍管理系统的附带文章源码部署视频讲解等
89 3
|
5月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的家政平台附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的家政平台附带文章源码部署视频讲解等
72 3
下一篇
DataWorks