好久没有写博客了,先来忏悔一下下,请给我一分钟默哀的时间…
今天跟我们小组的童鞋分享了一些网上曾提到过的小知识点,遭到了大大的吐槽,更有童鞋直言这几道题做完之后,直接让他们开始怀疑人生了。
其实我当然清楚,童鞋们这么说言过其实了,肯定是为了捧我场,所以才不惜以牺牲自己的面子为前提,若不然这样的小点点,不是分分钟钟就搞定了嘛(/(ㄒoㄒ)/~~)。
你们这样做,我心里还真是那个感激涕零,那个热泪盈眶,那个百感交集、那个声泪俱下、那个…呃,想不出词了,还是扯回来吧…
总之,一句话,好姐妹,一辈子。
**我已经默认把你们当姐妹了,你们就拿我当兄弟吧。**大笑中…
好了,话就说到这儿,咱还是入正题吧。
首先,必须说明的是:如有不当,敬请指正
1. 多变量统一定义赋值
(function(){
var a = b = 'shaner';
})();
console.log(typeof b);
console.log(typeof a);
这道题的考察点主要是: var a = b = ‘shaner’; 这样的写法它实际是如何执行的。
如果你已经很清楚了,那么请直接跳过吧。
var a = b = 'shaner';
相当于
b = 'shaner';
var a = b;
问题1. 这样写真的有必要吗?虽然它能在一定程度上简化你的代码,而且在很多地方都建议这么写,但是你真的希望为了这些理由来污染全局变量吗?
问题2. 如果是在严格模式下(即使用 use strict),这可是会报错的那,变量b已经委屈的被移到墙外了。
2. 数组方法
var arr1 = "john".split('');
var arr2 = arr1.reverse();
var arr3 = "jones".split('');
arr2.push(arr3);
console.log("array 1: length=" + arr1.length + " last=" + arr1.slice(-1));
console.log("array 2: length=" + arr2.length + " last=" + arr2.slice(-1));
对于这题,你就直接告诉我,你对reverse()有多熟,好了。反正之前我对它只知一二,不知道其居然还有三。
- 用于颠倒数组中元素的顺序。
- 该方法会改变原来的数组,而不会创建新的数组!该方法会改变原来的数组,而不会创建新的数组!该方法会改变原来的数组,而不会创建新的数组!(重要的事还是说三遍吧)
3. 对象属性
var a = {},
b = {b:'b'},
c = {c:'c'};
a[b] = 123;
a.b = 34;
a[c] = 456;
console.log(a[b]);
你对对象属性值有多了解,你就有多清晰。对于这道题,给我们实习的小童鞋满分,解析的非常透彻!
在这里,偷点懒,直接复制答案了,如下:
原因为:当设置对象属性时,JavaScript会暗中字符串化参数值。在这种情况下,由于 b 和 c都是对象,因此它们都将被转换为"[object Object]"。结果就是, a[b]和a[c]均相当于a["[object Object]"] ,并可以互换使用。因此,设置或引用 a[c]和设置或引用 a[b]完全相同。
注:在这里,另外给大家提个醒,如果key是数字的话,千万不要用英文点(.)的方式调用那。
4. if语句求值
var y = 1;
if (function f(){}) {
y += typeof f;
}
console.log(y);
对于这道题,我表示真是涨知识了,原来还有这种解锁,哦,不,落锁方式那。
答案:1undefined
说明:JavaScript中if语句求值其实使用eval函数,也就是eval(function f(){}) 那。
5. 逗号运算符
最后以逗号运算符结尾。
(1, 2, 3);
(1, 2, 3, alert )("hello world");
alert(2*5, 2*4);
[1,2,3][0||1,2]
[1,2,3][1,2||3]
("hello","world")[1,2,3]
答案自己去执行看看吧。
知识点1:逗号运算符,是先计算左边的参数,再计算右边的参数值。然后返回最右边参数的值。
知识点2:逗号运算符在js中的优先级是最低的。
剩下的自己去揣测吧,不说了。
最后,膜拜那些早已探索出各种奥妙的大神们 。