身为前端攻城狮‘必知’的 JavaScript 知识点

好久没有写博客了,先来忏悔一下下,请给我一分钟默哀的时间…


今天跟我们小组的童鞋分享了一些网上曾提到过的小知识点,遭到了大大的吐槽,更有童鞋直言这几道题做完之后,直接让他们开始怀疑人生了。

其实我当然清楚,童鞋们这么说言过其实了,肯定是为了捧我场,所以才不惜以牺牲自己的面子为前提,若不然这样的小点点,不是分分钟钟就搞定了嘛(/(ㄒ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中的优先级是最低的。
剩下的自己去揣测吧,不说了。

最后,膜拜那些早已探索出各种奥妙的大神们 。


  1. http://www.codeceo.com/article/20-javascript-questions.html
  2. http://www.codeceo.com/article/who-said-javascript-was-easy.html
  3. http://www.codeceo.com/article/25-essential-javascript-interview-questions.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值