1.實現add(3,2)與add(3)(2)返回結果都爲5.
代碼如下:
function add(x,y){
var sum = x;
if(y){
return (sum + y);
}
else
{
var add2 = function(z){
return (sum + z);
}
return add2;
}
}
var add1 = add(2,3);
console.log(add1);
var add2 = add(2)(3);
console.log(add2);
2.var foo = “Hello”;
(function() { var bar = ” World”; alert(foo + bar); })(); alert(foo + bar);
運行結果:
"Hello World" & ReferenceError: bar is not defined
3.
var foo = [];
foo.push(1);
foo.push(2);
問題:foo.length的值是什麼? 答案:2
4.
var foo = {n: 1};
var bar = foo;
foo.x = foo = {n: 2};
問題:foo.x的值是什麼?答案是undefined
5.
console.log('one');
setTimeout(function() {
console.log('two');
}, 0);
console.log('three');
問題:返回結果分別是什麼?答案是one,three,two
答案解析:setTimeout最後執行。
6.
var a=[];
for(var i=0; i<10; i++){
a[i]=function(){
console.log(i);
}
}
a[6](); //10
上面代碼中,變量i是var聲明的,在全局範圍內都有效,每一次循環新的i值都會覆蓋舊值,導致最後輸出的是最後一輪的i的值,當i爲10的時候不在進行循環,所以結果爲10。
正確的寫法1:
var a=[];
for(let i=0;i<10;i++){
a[i]=function(){
console.log(i);
}
}
a[6](); //6
方法二:利用閉包
var a=[];
for (var i = 0; i < 10; i++ ) {
a[i] = (function(index){
return function(){
console.log("ret: " + index);
}
})(i);
}
a[6]();
7.數組快速去重拼接:如[1,2,3]和[2,4,5]很快的拼接成[1,2,3,4,5],利用ES6新特性Set
var result = [1,2,3,4]
result = result.concat([2,3,4,5]);
var set = new Set(result);
var array = Array.from(set);
8.[1,2,3,4,5].duplicate(); 變成[1,2,3,4,5,1,2,3,4,5]的方法。
// 方法1
Array.prototype.duplicate = function() {
var i = 0,
arr = [];
for (i = 0;i < this.length; i++) {
arr.push(this[i]);
};
for (i = 0;i < this.length; i++) {
arr.push(this[i]);
};
return arr;
}
// 方法2
Array.prototype.duplicate = function() {
var i = 0,
arr = this.join("");
arr += arr;
return arr.split("").map(function(v){
return +v;
});
}
// 方法3
Array.prototype.duplicate = function() {
return this.concat(this);
}
9.遞歸算法,取出多維數組中的值,組成新數組。
代碼如下:
function steamrollArray(arr) {
var flattenedArray = [];
// Create function that adds an element if it is not an array.
// If it is an array, then loops through it and uses recursion on that array.
var flatten = function(arg) {
if (!Array.isArray(arg)) {
flattenedArray.push(arg);
} else {
for (var a in arg) {
flatten(arg[a]);
}
}
};
// Call the function for each element in the array
arr.forEach(flatten);
return flattenedArray;
}
// test here
steamrollArray([1, [2], [3, [[4]]]]);
10.二進制轉爲Unicode碼
代碼如下:
function binaryAgent(str) {
str=str.split(" ");
for(var i=0;i<str.length;i++){
str[i]=parseInt(str[i],2);//2進制轉爲10進制
str[i]=String.fromCharCode(str[i]);//找出10進制數字對應的Unicode碼
}
return console.log(str.join(""));
}
binaryAgent("01000001 01110010 01101110 00100001 00111111");
11.小技巧判斷瀏覽器類型
代碼如下:
var agt=navigator.userAgent.toLowerCase();
var browserType;
var browserVer;
if (agt.indexOf("opera") != -1)
{
browserType = "Opera";
if (agt.indexOf("opera 7") != -1 || agt.indexOf("opera/7") != -1)
{ browserVer = "Opera7"; }
else if (agt.indexOf("opera 8") != -1 || agt.indexOf("opera/8") != -1)
{ browserVer = "Opera8"; }
else if (agt.indexOf("opera 9") != -1 || agt.indexOf("opera/9") != -1)
{ browserVer = "Opera9"; }
}
else if (agt.indexOf("applewebkit") != -1)
{
browserType = "Safari";
if (agt.indexOf("version/3") != -1)
{ browserVer = "Safari3"; }
else if (agt.indexOf("safari/4") != -1)
{ browserVer = "Safari2"; }
}
else if (agt.indexOf("khtml") != -1)
{
browserType = "Konqueror";
}
else if (agt.indexOf("msie") != -1)
{
browserType = "IE";
if (agt.indexOf("msie 6") != -1)
{ browserVer = "IE6"; }
else if (agt.indexOf("msie 7") != -1)
{ browserVer = "IE7"; }
}
else if (agt.indexOf("gecko") != -1)
{
browserType = "Firefox";
if (agt.indexOf("rv:1.7") != -1)
{ browserVer = "Firefox1"; }
else if (agt.indexOf("rv:1.8)") != -1 || agt.indexOf("rv:1.8.0") != -1)
{ browserVer = "Firefox15"; }
else if (agt.indexOf("rv:1.8.1") != -1)
{ browserVer = "Firefox2"; }
}