为什么控制台打印{}+[]===[]+{}为false?

本文探讨了JavaScript中控制台打印`{}+[]===[]+{}`为何为false的问题。通过分析`toString()`和`valueOf()`方法的调用顺序,以及`eval()`函数的影响,揭示了其背后的逻辑。最终得出结论,这涉及到JavaScript中运算符优先级和类型转换的深入理解。
摘要由CSDN通过智能技术生成

事由

前几天有人在微博上发了一张图片(回微博找没找到了),说对于下面的运算较为困惑:
[]+{}=== {}+[]       // true
{}+[]=== []+{}      // false
({}+[]) ===  ([]+{}) // true
[]+{}                // "[object Object]"
{}+[]                // 0
({}+[])              // "[object Object]"


 
  
当时我看了题目之后,兴趣与疑心并存,并产生了强烈的好奇感,很奇怪的问题,不是吗?而且,它与eval('{a:1}')不会报错而eval('{“a”:1}')就会报错又有什么关系呢?疑点重重不是吗?

实验

带着好奇心,我在Chrome控制台做了一番实验,发现结果果然是这样!
但是就在我更疑惑不解的时候,我突然想起了一个问题,Chrome的控制台是用eval来执行的!于是,我马上在编译器里输入了一下测试代码,结果果然不出我所料:
[]+{}=== {}+[]       // true
{}+[]=== []+{}      // true
({}+[]) ===  ([]+{}) // true
[]+{}                // "[object Object]"
{}+[]                // "[object Object]"
({}&
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
控制台中的字体大小可以通过控制台的属性进行更改。您可以按照以下步骤更改字体大小: 1. 右键单击控制台窗口的标题栏,然后选择“属性”。 2. 在“属性”窗口中,选择“字体”选项卡。 3. 在“字体”选项卡中,选择所需的字体和字号。 4. 单击“确定”以保存更改。 如果您需要在C#代码中控制控制台窗口的字体大小,则需要使用Windows API函数来实现。以下是一个简单的示例: ``` using System; using System.Runtime.InteropServices; class Program { [DllImport("kernel32.dll", SetLastError = true)] static extern IntPtr GetStdHandle(int nStdHandle); [DllImport("kernel32.dll", SetLastError = true)] static extern bool GetCurrentConsoleFont(IntPtr hConsoleOutput, bool bMaximumWindow, out CONSOLE_FONT_INFO lpConsoleCurrentFont); [DllImport("kernel32.dll", SetLastError = true)] static extern bool SetCurrentConsoleFontEx(IntPtr hConsoleOutput, bool bMaximumWindow, ref CONSOLE_FONT_INFO_EX lpConsoleCurrentFontEx); const int STD_OUTPUT_HANDLE = -11; static void Main(string[] args) { IntPtr hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE); CONSOLE_FONT_INFO consoleCurrentFont; GetCurrentConsoleFont(hConsoleOutput, false, out consoleCurrentFont); CONSOLE_FONT_INFO_EX consoleCurrentFontEx = new CONSOLE_FONT_INFO_EX(); consoleCurrentFontEx.cbSize = (uint)Marshal.SizeOf(consoleCurrentFontEx); consoleCurrentFontEx.FontFamily = consoleCurrentFont.FontFamily; consoleCurrentFontEx.FontWeight = consoleCurrentFont.FontWeight; consoleCurrentFontEx.dwFontSize = new COORD(0, 24); SetCurrentConsoleFontEx(hConsoleOutput, false, ref consoleCurrentFontEx); Console.WriteLine("Hello, world!"); } } [StructLayout(LayoutKind.Sequential)] struct COORD { public short X; public short Y; public COORD(short x, short y) { X = x; Y = y; } } [StructLayout(LayoutKind.Sequential)] struct CONSOLE_FONT_INFO { public int nFont; public COORD dwFontSize; } [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] struct CONSOLE_FONT_INFO_EX { public uint cbSize; public uint nFont; public COORD dwFontSize; public int FontFamily; public int FontWeight; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] public string FaceName; } ``` 以上代码将控制台窗口的字体大小更改为24pt。您可以通过更改 `dwFontSize` 字段的值来更改字体大小。请注意,此代码仅适用于Windows平台。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值