(京东)下面代码中 a 在什么情况下会打印 1?

一、题目描述

// 下述代码会在什么情况下打印1?
var a = ?;
if (a == 1 && a == 2 && a == 3) {
    console.log(1);
}

二、考察知识点

1、隐式转换

2、对象与原始数据类型比较的过程及底层原理

三、方案一

1、代码

var a = [1, 2, 3];
a.join = a.shift;
if (a == 1 && a == 2 && a == 3) {
    console.log(1);
}

2、分析

  • 数组也是一种对象
  • 数组调用toString方法时,会对其中每一个元素调用toString方法并返回结果,而后调用join方法将结果拼接为字符串
  • 数组的shift方法,会每次删除数组中的第一个元素(改变原数组),返回值是被删除的元素
  • 将a.join方法改写为a.shift方法,这样数组在调用toString方法时调用的join方法就变成了shift方法,每次返回第一个元素,并且正好删除第一个元素,那么if判断就成立了
var a = [1, 2, 3];

// 对a调用toSting方法 底层操作为:
var aStr = [a[0].toString(), a[1].toString(), a[2].toString()].join();
console.log(aStr);

// 将a.join方法修改为a.shift,相当于:
var aStr1 = [a[0].toString(), a[1].toString(), a[2].toString()].shift();
console.log(aStr1);  // 返回值为1

// 每次 去调用 shift 就会改变一次原数组
a.join = a.shift;

// if判断条件做从往右执行
// 指行到 a==1 shift调用第一次,返回1
// 指行到 a==2 shift调用第二次,返回2
// 指行到 a==3 shift调用第二次,返回3
// 满足条件
if (a == 1 && a == 2 && a == 3) {
    console.log(1);
}

四、方案二

1、代码

var a = {
    i: 1,
    toString: function () {
        return a.i++;
    }
}
if (a == 1 && a == 2 && a == 3) {
    console.log(1);
}

2、分析

  • 对象在转换为原始类型时,会先调用对象的valueOf方法,随后调用toString方法
  • 此方案就是直接通过为a提供一个toString方法来实现每次调用返回不同的值
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对接京东打印需要编写Java代码,并使用京东打印的API进行调用。以下是一个简单的示例代码: ```java import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; public class JDCloudPrintIntegration { public static void main(String[] args) { try { // 准备请求的URL和参数 String url = "https://api.jdcloud.com/v1/print/tasks"; String requestData = "{\"printerId\":\"your_printer_id\",\"content\":\"your_print_content\"}"; // 创建URL对象并打开连接 URL obj = new URL(url); HttpURLConnection connection = (HttpURLConnection) obj.openConnection(); // 设置请求方法为POST connection.setRequestMethod("POST"); // 设置请求头 connection.setRequestProperty("accept", "application/json"); connection.setRequestProperty("content-type", "application/json"); connection.setRequestProperty("authorization", "your_authorization_token"); // 开始写入请求数据 connection.setDoOutput(true); OutputStream os = connection.getOutputStream(); os.write(requestData.getBytes()); os.flush(); os.close(); // 获取响应结果 BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); String inputLine; StringBuffer response = new StringBuffer(); while ((inputLine = in.readLine()) != null) { response.append(inputLine); } in.close(); // 输出响应结果 System.out.println(response.toString()); } catch (Exception e) { e.printStackTrace(); } } } ``` 以上代码,需要将`your_printer_id`替换为你的打印机ID,`your_print_content`替换为需要打印的内容,`your_authorization_token`替换为你的授权令牌。通过调用京东打印的API,可以实现与京东打印的对接。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值