Xiang Li
Xiang Li
**学习过程:** 1.一行行研习代码:首先是用“对象直接量”的办法创建了一个对象,犀牛书120页6.1.1,研习了一下什么情况下对象的属性名要加引号,尝试在name上加引号和不加引号都可以运行代码; 2.typeof: 印象中,课上演示的代码里typeof都会加(),尝试了一下是否加()代码都可以运行; 3.函数,if...else...都能看懂了 4.思考为什么,写这段代码的目的是为了干嘛? 这段代码的译文:如果obj是一个对象,则输出这个对象的name属性值,如果不是一个对象,则输出一个结果表示obj不是一个对象。 思考:如果是为了判别一个名字为obj的东西是否是一个对象,首先,作为写代码的人自己得知道自己写的是什么,如果实在不知道,直接输typeof(obj)输出结果就好了吧,为什么要用if...else这么复杂的办法?而且为什么要指定输出属性为name的值?我猜得在上下文的场景下才能理解到这么做的必要性。就像阅读理解中上下文的衔接,不可以断章取义。 5.再看回标题“用**typeof obj ==='object' 判断obj是否是一个object**”,这样的话直接 ## `console.log(typeof obj ==='object’)` 就可以了吧,返回true,不知道这不是是就是所谓的一行代码可以搞定的事情就不要兴师动众。
这个问题是否可以类比为:都有翻译软件了,学外语还有必要吗?翻译软件应该是工具吧。模块应该也被视为工具。 学习任何一个技能,包括编程,可以带来的好处不一定只有显性的。其他好处,比如给自己提供多一种思维模型(给自己的大脑多装一个内置库),甚至不一定用在计算机相关的专业上,哪怕通过代码的逻辑运算加强了一个人的逻辑思维能力,哪怕在学习过程中增强自己解决问题的能力。再比如,设计出这些语言和计算机相关的人那么聪明,如果可以通过学编程初探他们是怎么思考问题的,他们为什么这样设计,那将会是一个多么美好的体验!
**共同点**:都是对象,可以被JavaScript调用; 最大的区别在于json文件中的属性名必须要有**双**引号。 **普通对象**: 1.属性名的引号大部分情况下可以没有,但是当属性名当中包含空格,或者包含连字符,或者是保留字的时候,需要加引号。(源自犀牛书page120页6.1.1节) 2.普通对象定义结束后需要在{}后面增加分号,表示JavaScript语句结束 **Json对象:** 1.只是一种数据格式,并不从属于JavaScprit,有的其他编程语言可以解析Json数据格式 2.属性名称上必须有双引号(双引号 双引号 双引号)
自己在运行代码之前心里想的结果是:false和1(因为1不等于2,所以应该就是false吧)。运行结果出现2和2的时候,发现根本没有在用计算机语言思考问题。 obj这个对象中count的值是1,属性是number,而number是原始值,是不可更改的。 根据犀牛书page46:“存取数字时创建的临时对象称作包装对象,它只是偶尔用来区分数字和数值对象。"(通常,包装对象只是被看作是一种实现细节,而不用特别关注) 把console.log(obj.count)这一行的位置调整一下,输出结果变为:1和2 ``` function output(obj) { console.log(obj.count); obj.count = obj.count + 1; } ``` 所以,原来的函数output(obj)中:obj.count = obj.count + 1;可以理解为是在原始值1的基础上增加1,经过这一行代码的计算之后,新的临时值变成2,所以output(obj)的输出结果为2. 在此基础上运行console.log(obj.count)输出的应该还是包装对象的值,所以还是2. 我能够想到的办法让函数内的计算不影响函数外的obj.count办法是: 函数内的变量换一个名字,比如obj.Count,最终运行代码输出值为2和1 ``` var obj = { count:...