Wei Han

Results 4 comments of Wei Han

有缺陷。 1、因为typeof null的结果也是object,但在js中null实际上并不是对象,为保证obj = null时也能正确判断,所以需要加上对null的判断if (typeof obj === 'object' && obj !== null) ; 2、如果该函数是用于判断任意变量或直接量是否是对象的,那么使用obj.name就不合逻辑了。因为不是所有对象都有name的属性的。为了和else的结果对应,为对象时输出console.log(‘obj is an object')比较符合写函数的目的。 => 老师的补充 1. output函数在接收参数传入时,如果参数正好是null,null也是object类型,而null.name会导致代码运行报错。因此一定要排除特殊情况null。 2. 至于传入的obj是否有无name,这个最少不会导致代码运行出错,obj.name即使没有也会默认输出一个undefined。是否必要判断obj中存不存在name,可以依据具体的业务情况来定夺。

I have met the same problem recently, and I'm use in nextjs too.

共同点:两者都是用于表示并操作的数据类型,都是对数据存储的一种格式规范。除了普通对象的属性名可以使用标识符外,两者的具体写法基本一致。 差异:普通对象是作为编程语言的基本数据类型,用于运行在特定语言环境中的代码文件里(本例是js),而且需要赋值给变量才能真正使用。而json对象是用于数据交互的数据类型,可以适应多种语言环境,而且它既可以赋值给变量进行运算与交互,也可以直接写在json数据文件里进行文件交互。json对象储存的信息都可以存在普通对象里。但反过来,因为受到属性名的限制并不是所有的普通对象都可以当作json对象使用。归根结底,比起数据及格式上的差异,主要的区别表现在用途上。

执行的结果是一样的,因为在使用对象作为函数参数时,实际上传送给函数的是对象的地址,即函数体内的对象和作为参数的原对象实际上是同一个。所以,想要不影响外面的obj,就需要在函数体内定义一个局部的obj对象,并复制外部obj的值。 本例可实现如下: ```js var obj = { count: 1 } function output(obj) { var obj = JSON.parse(JSON.stringify(obj)); obj.count = obj.count + 1; console.log(obj.count); } ```