a==1a==2a==3 与 a===1a===2a===3如何实现?

news2024/11/18 9:35:32

前言

首先,我们来看个demo

let a = {
   value: 1,
    toString() {
        // console.log("toString")
        return this.value++;
    }
}

看一下输出结果:

console.log(a === 1 && a === 2 && a === 3) // false

console.log(a == 1 && a == 2 && a == 3) // true

结论:通过Object的toString()可以实现 a1 && a2 && a3 而并不能实现 a=1 && a=2 && a=3

然后,加上万能的console

let a = {
   value: 1,
    toString() {
        console.log("toString")
        return this.value++;
    }
}
console.log(a === 1 && a === 2 && a === 3) // false
console.log("--------------------------------------")
console.log(a == 1 && a == 2 && a == 3) // true

输出结果:
在这里插入图片描述

也就是说使用 == 隐式转换使得Object调用了toString()

举例

使a == 1&&a == 2&&a == 3为true的方法

// 方法一:通过toString()实现
let i1 = {
    i: 1,
    toString() {
        return this.i++;
    }
}
console.log("toString() => ", i1 == 1 && i1 == 2 && i1 == 3) // true

// 方法二:通过valueOf()实现
let i2 = {
    i: 1,
    valueOf() {
        return this.i++;
    }
}
console.log("valueOf() => ", i2 == 1 && i2 == 2 && i2 == 3) // true


// 方法三:Object.defineProperty() 实现
let value = 1;
Object.defineProperty(window, "c", {
    get: function() {
        return value++;
    }
})
console.log("Object.defineProperty() => ", c == 1 && c == 2 && c == 3)

// 方法四:通过Proxy实现
let d = new Proxy({}, {
    value: 1,
    get(target, key) {
        return () => this.value++;
    }
})
console.log("new Proxy() => ", d == 1 && d == 2 && d == 3)

// 方法五:Symbol.toPrimitive实现
let e = {
    value: 1,
    [Symbol.toPrimitive]: () => {
        return e.value++;
    }
}
console.log("Symbol.toPrimitive => ", e == 1 && e == 2 && e == 3)

// 方法六:数组的shift()方法
let f = [1, 2, 3]
f.join = f.shift;
console.log("shift() => ", f == 1 && f == 2 && f == 3)

// 方法七:数组的pop()方法
let g = [3, 2, 1]
f.join = f.pop;
console.log("pop() => ", g == 1 && g == 2 && g == 3)

使a === 1&&a === 2&&a === 3为true的方法

 // 方法1:Object.defineProperty实现
   let value = 1;
   Object.defineProperty(window, "a", {
     get:function() {
       return value++;
     }
   });
    console.log(a === 1 && a === 2 && a === 3) // true
    
    // 方法2:Proxy实现
   let b = {
       number: 1
   };
   b = new Proxy(b, {
       get(target, key) {
           return target[key]++;
       }
   });
   console.log(b.number === 1 && b.number ===2 && b.number ===3) // true

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/700086.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PHP 旅游信息管理系统mysql数据库web结构apache计算机软件工程网页wamp

一、源码特点 PHP 旅游信息管理系统 是一套完善的web设计系统,对理解php编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为PHP APACHE,数据库 为mysql5.0,使用php语言开发。 …

nerf-studio初体验

前言 整个安装过程非常简单,运行得也很丝滑,最大的难点在于中文资料太少,英文看得头痛。本文也是参考了许多链接,有些链接比我写得详细多了,各位选择性看吧 安装 安装过程参考github链接,按顺序一步一步…

使用 ZBrush 和 Substance 3D中创建逼真的露西(p2)

今天瑞云渲染小编给带来了Rafael Benedicto 分享的 Lucy 项目背后工作流程,解释了头发是如何设置的,并回顾了在 Substance 3D Painter 中完成的纹理化过程。篇幅较长,分上下两篇来阐述幕后花絮。接下来接着讲述Lucy项目的纹理和渲染方面内容。…

PS 设置图片背景透明

找魔棒工具:编辑-工具栏。可设置w改为Z。(方便使用) 魔棒工具选择背景(w) 删除即可 如果我们导入的是“智能对象”,使用左侧的“矩形选区”删除框选区域的时候,就会弹出“无法完成请求&#…

pytorch量化库使用(1)

量化简介 量化是指以低于浮点精度的位宽执行计算和存储张量的技术。量化模型以降低的精度而不是全精度(浮点)值对张量执行部分或全部运算。这允许更紧凑的模型表示以及在许多硬件平台上使用高性能矢量化操作。与典型的 FP32 模型相比,PyTorc…

OnlyOffice7.3.2.8 和 7.3.3.40 Docker魔改版搭建教程

写在前面: 搭建项目所需环境只需查看此篇文档即可,中间有不清楚的地方评论即可,看到会回复! ⼀ 、安装docker: 具体步骤请参照docker官网: https://docs.docker.com/get-docker/ 注: 不同操作系统安装方…

今天分享:配音软件哪个好

在数字化时代,视频内容的需求愈发增长。越来越多的人们创作和分享各种类型的视频,而其中一个重要的元素是声音。然而,有时候我们可能面临着一种情况:我们拍摄了一段令人惊艳的视频,但缺乏适合的配音或原声录音。这时&a…

人工智能时代,前端如何抓住机会

自从 2022 年底 OpenAI 推出了 ChatGPT3.5 后,GPT 的活跃用户数快速突破一亿,打破了互联网应用发展的历史记录。ChatGPT是一种基于人工智能技术的聊天机器人,它可以理解人类的自然语言,模拟人类的语言和思维方式,与人类…

介绍几款在线编程工具(Python)

阅读原文 有时候个人电脑不在身边,又需要处理一些工作,这时候可能需要在朋友的电脑或者公用电脑上操作数据。又或者要将自己写的代码以 notebook 的形式分享给 co-worker,这时就需要用到以下总结的几个直接在浏览器里进行 Python 编程的工具。…

怎么学习数据库连接与操作? - 易智编译EaseEditing

学习数据库连接与操作可以按照以下步骤进行: 理解数据库基础知识: 在学习数据库连接与操作之前,首先要了解数据库的基本概念、组成部分和工作原理。 学习关系型数据库和非关系型数据库的区别,了解常见的数据库管理系统&#xff…

为何及如何使用数据结构提升算法效率和问题解决能力?

数据结构是计算机科学中的一个重要概念,它是一种组织和存储数据的方式。数据结构提供了一种在计算机程序中有效地组织和操作数据的方法。 数据结构的主要目的是解决问题和优化算法。它们帮助我们在计算机内存中存储和组织数据,以便能够高效地访问和操作这…

Flink 自定义源算子之 读取MySQL

1、功能说明: 在Flink 自定义源算子中封装jdbc来读取MySQL中的数据 2、代码示例 Flink版本说明:flink_1.13.0、scala_2.12 自定义Source算子,这里我们继承RichParallelSourceFunction,因为要使用open方法来初始化数据库连接对…

Egg.js阿里JS后端框架,可以放心用。

目录 一、快速开始 二、尝试创建一个controll,修改路由,然后检查测试单元。 一、快速开始 npm install -g yarn yarn create egg --typesimple cd egg yarn install yarn devhttp://127.0.0.1:7001 二、尝试创建一个controll,修改路由,然后检查测试单…

PDF怎么转图片?PDF转图片的方法分享!​

PDF怎么转图片呢?相信很多人都会觉得PDF的非常的好用,小编也是被身边很多朋友推荐过后用了这个软件。但很多人在使用的时候有疑问,比如说PDF如何转图片?这难倒不少人,那么今天这篇文章就带你解析PDF怎么转图片&#xf…

LiangGaRy-学习笔记-Day25

1、Apache web相关 1.1、curl命令 作用:用来与服务器之间传输数据的工具 官网:https://curl.se支持很多种协议 语法:curl选项网址 选项: -A:设置代理给服务器-I(大写i):输出返…

Spring Boot 中的 WebMvc 是什么,原理,如何使用

Spring Boot 中的 WebMvc 是什么,原理,如何使用 介绍 在 Spring Boot 中,WebMvc 是非常重要的一个模块。它提供了一系列用于处理 Web 请求的组件和工具。在本文中,我们将介绍 Spring Boot 中的 WebMvc 是什么,其原理…

Python+ddt+Excel实现接口自动化测试生成完美测试报告

接口自动化测试是指通过编写代码或使用工具,模拟用户发送请求,验证接口是否符合设计规范和功能需求的过程。” 如何用 python ddtexcel 实现接口自动化测试 接口自动化测试可以提高测试效率和质量,节省测试成本和时间,保证测试覆…

一步一步学OAK之八:通过OAK相机实现视频帧拼接

帧拼接在有些场景下非常有用,比如将一个较大的帧输入到尺寸较小的神经网络中时。可以将较大的帧拆分成多个较小的帧,并将这些较小的帧输入到神经网络中。 这里我们使用 2 个 ImageManip 将原始预览帧拆分为两个帧。 这里写目录标题 涉及到的节点内容Co…

STM32实战项目—停车计费系统

文章目录 一、任务要求1.1 概述1.2 串口收发1.2.1 串口输出内容1.2.2 串口接收内容 1.3 说明 二、实现思路2.1 指令判别2.1 车辆进入2.2 车辆驶出2.3 费率调整 三、程序设计3.1 串口接收消息处理3.2 车辆驶入处理函数3.3 车辆驶出处理函数3.4 费率调整处理函数 题目原型是第十二…

4-Python如何创建等比数列?【视频版】

目录 问题视频解答 问题 视频解答 点击观看: 4-如何创建等比数列?