打印对象的 “精心骗局”

var  obj = {
       name : ‘zs‘,
       age : 18
}

console.log(obj); // {  name : ‘zs‘ ,age : 18}

这有什么?平常的声明和打印,很正常啊?是的非常正常,以至于看不出其中的猫腻。再来看下面的例子

var  obj = {
       name : ‘zs‘,
       age : 18
}

obj.name = ‘ls‘;
console.log(obj); // {  name : ‘ls‘ ,age : 18}

这也没什么啊?改变name值然后打印,很是很正常,但是睁大你的眼睛:

var  obj = {
       name : ‘zs‘,
       age : 18
}

console.log(obj); // {  name : ‘zs‘ ,age : 18},但是展开后就变成 { name : ‘ls‘,age : 18 }
obj.name = ‘ls‘;

提前打印,但是后续改变属性值,打印{ name : ‘zs‘ ,age : 18},但是展开后就变成 { name : ‘ls‘,age : 18 },有人说这还有展开?是的每一个对象左边都有一个顶点朝右的灰色等边三角形,点击顶点朝下。

这是由于打印对象后续操作有改变的情形。有人就说这有什么关系?反正不展开之前打印的表面数据已经可以检测效果了虽然展开是改变对象后的内容但是不展开还是想要看到的数据,这不就可以了吗?没错,想法是对的,但是:如果是一个对象中的属性值也是一个对象,控制台打印的时候就会把二层对象给打印出{...},想要查看必须点击小三角展开这时候必然是改变过后的值了,还能达到预期效果吗?

那么又有什么办法呢我就想要瞬时的哪一个阶段打印的对象呢?打印的时候用JSON.stringify包一下变成字符串JSON.stringify(obj),把对象改为字符串,又有人问了直接+" "不就行了,这就是js的神奇之处,直接对象+" "输出的就是[object Object]。

原文地址:https://www.cnblogs.com/wchjdnh/p/10798225.html

时间: 2024-11-08 20:03:09

打印对象的 “精心骗局”的相关文章

【Swift】ios开发中巧用 description 打印对象时,打印对象的属性

ios开发中我们打印对象的时候,会直接输出对象地址,这样不方便我们开发.我们可以 巧用 description 打印对象时,输出对象的属性 在oc中直接重写即可.swift中需要遵守Printable协议 看下面的例子 1 override var description: String { 2 let properties = ["属性1", "属性2", "属性3", "属性4"] 3 4 return "\(d

Objective-C 通过description方法来打印对象

C++中可以直接打印对象指针,打印的就是该指针指向的虚拟内存地址,Java中通过打印对象可以输出对象的虚拟内存地址,OC中同样可以通过打印对象指针来输出对象的虚拟内存地址,也提供了description方法来控制打印的内容,子类重写父类的description方法即可实现任意的打印效果,用法同Java中重写toString()方法几乎完全一样. // // Goods.h // 04_Description // // Created by apple on 14-11-9. // Copyri

打印对象和toString方法

JAVA对象 java对象是都是Object类的实例,都可直接调用该类中定义的方法,这些方法提供了处理java对象的通用方法. > > 6.2.1打印对象和toString方法    先看下面程序:  程序清单:codes/06/6-2/PrintObjectjava public class PrintObject{ public static void main(String args[]){ Person p = new Person("帅气de猪八戒"); Syst

打印对象

//打印对象function writeObj(obj){ var description = ""; for(var i in obj){ var property=obj[i]; description+=i+" = "+property+"\n"; } alert(description); }

Python__打印对象信息__str__

class People:def __init__(self,name,age,sex):self.name=nameself.age=ageself.sex=sex def __str__(self): #在对象被打印时触发执行return '<name:%s age:%s sex:%s>' %(self.name,self.age,self.sex) p1=People('egon',18,'male')p2=People('alex',38,'male') print(p1)print(

JS打印对象的方法&amp;将Object转换为String的函数

1.有时候需要把对象中的字段属性打印出来,下面用JS实现输出对象: 1 function writeObj(obj) { 2 var description = ""; 3 for (var i in obj) { 4 var property = obj[i]; 5 description += i + " = " + property + "\n"; 6 } 7 alert(description); 8 } 2.结果对象是object而无法

.NET 工具类ObjectDumper 打印对象

// Comes from the LINQ samples provided by Microsoft //Copyright (C) Microsoft Corporation. All rights reserved. using System; using System.IO; using System.Collections; using System.Collections.Generic; using System.Reflection; public class ObjectDu

使用printf定制化打印对象

TBOX内置的libc库,有一份自有的printf实现,在支持了所有标准格式化参数的同时,也对其进行了一些扩展,来支持自定义的格式化参数打印, 例如: // 输出定点数:3.14 tb_printf("%{fixed}\n", tb_float_to_fixed(3.14)); // 输出ipv4地址:127.0.0.1 tb_ipv4_t addr; tb_ipv4_set(&addr, "127.0.0.1"); tb_printf("%{ip

如何打印对象内容

1. 一个最基本的例子 使用Logging框架写Log基本上就三个步骤 引入loggerg类和logger工厂类 声明logger 记录日志 下面看一个例子 //1. 引入slf4j接口的Logger和LoggerFactoryimport org.slf4j.Logger;import org.slf4j.LoggerFactory; public class UserService {  //2. 声明一个Logger,这个是static的方式,我比较习惯这么写.  private fina