美文网首页
定义一个变量 使等式 a == 7 && a == 8 && a

定义一个变量 使等式 a == 7 && a == 8 && a

作者: _____西班木有蛀牙 | 来源:发表于2019-11-11 12:35 被阅读0次

文章来自:Alen-Huan

解决方案1

var a = {
  i: 7,
  valueOf: null,
  // valueOf: () => {
  //     // 此处还使用了++操作符  i++ 先使用后赋值
  //     // ++i 先赋值再使用
  //     return a.i++
  // },
  toString: () => {
    // 此处还使用了++操作符  i++ 先使用后赋值
    // ++i 先赋值再使用
    return a.i++
  }
}

console.log(a == 7 && a == 8 && a == 9) // true

解决方案2

var b = {
  i: 1,
  k: ''
}

// 该方法会直接在对象上定义一个新属性,或者修改一个对象的现有属性,并返回这个对象
// Object.defineProperty(obj, prop, descriptor)
// obj  对象  prop 要定义或修改的属性的名称   descriptor  将被定义或修改的属性描述符
Object.defineProperty(b, 'k', {
  get: function () {
    return b.i++
  }
})
console.log(b.k == 1 && b.k == 2 && b.k == 3);

如果a是一个对象Object,那么在执行a==7的时候会先去调用对象的valueOf方法,如果该对象没有valueOf方法或者返回的还是对象;nul不算,就会继续调动对象的toString方法。

解决方案3


var a = [1, 2, 3]
a.toString = function () {
  console.log('调用了toString')
};
a.join = function () {
  console.log('调用了join')
};
a.valueOf = function () {
  console.log('调用了valueOf')
};
console.log(a == 1 && a == 2 && a == 3)

//运行结果:console.log('调用了valueOf')
//          false

var a = [1, 2, 3]
a.valueOf = a.shift;
a.toString = a.shift;
//对于数组对象,toString 方法返回一个字符串,该字符串由数组中的每个元素的 toString() 返回值经调用 join() 方法连接(由逗号隔开)组成。
//可以看到数组 toString 会调用本身的 join方法,这里把自己的join方法该写为shift,每次返回第一个元素,而且原数组删除第一个值,正好可以使判断成立。这里 == 比较也带来的副作用
// 此处有点儿不明白(toString调用本身的join方法,后面回来补充)
a.join = a.shift;
console.log(a == 1 && a == 2 && a == 3);// true

如果a是一个数组Array,数组也是对象,继承了对象的valueof方法和tostring方法;在进行转换时,如果有valueOf和toString方法,则也是先调用valueOf方法,如何没有valueof方法,则会调用tostring方法,如果没有前面两种方法,则会去调用join方法

相关文章

  • 定义一个变量 使等式 a == 7 && a == 8 && a

    文章来自:Alen-Huan 解决方案1 解决方案2 如果a是一个对象Object,那么在执行a==7的时候会先去...

  • 9 8 7 6 5 4 3 2 1 = 100

    题目描述:现有一等式;9 8 7 6 5 4 3 2 1 = 100。为了使等式成立,需要在数字间填写加号或者减号...

  • 2020-02-07

    在下面的( )中填上连续自然数使等式成立 ( 4)➕( 5)➕( 6)➕( 7)➕( 8 )=30 30➗5等...

  • python变量的基本使用

    单纯提供学习使用。 目标 变量定义 变量的类型 变量的命名 01. 变量定义 在 Python 中,每个变量 在使...

  • 跳出那个框

    老刘给我出了道题目:23-7=1(移动一个数字使等式成立)。我抓破脑壳也没想出来,貌似怎么移等式也是不可能...

  • Day2 练习题

    7. 下面定义变量正确的是() 8. n = 6784,以下能够获取到7 的方法有() a. n / 1000 %...

  • face6 自定义函数和内置函数

    4 8 7 10 4 执行的时候再读函数部分 着重记忆php函数的定义相关内容 理解变量作用域 ,静态变量...

  • CMake 常用命令记录

    预定义 [#%E7%B3%BB%E7%BB%9F%E5%8F%98%E9%87%8F]系统变量 [#%E7%BC%...

  • PHP递归算法(一)

    静态变量的方法 输出: 0 1 2 3 4 5 6 7 8 9 这种方法我们主要利用static定义静态变量来实现...

  • 元编程:类定义

    1.类定义和当前类 2.类实例变量 3.类变量 4.使用Class定义类 5.单件方法 6.类宏 7.单件类 8....

网友评论

      本文标题:定义一个变量 使等式 a == 7 && a == 8 && a

      本文链接:https://www.haomeiwen.com/subject/ffhtictx.html