//this绑定,立即执行函数表达式 var num = 1; var myObject = { num:2, add:function(){ this.num = 3; (function(){ console.log(this.num); this.num = 4; })(); console.log(this.num); }, sub:function(){ console.log(this.num); } } myObject.add(); console.log(myObject.num); console.log(num); var sub = myObject.sub; sub(); //结果 1 3 3 4 4
var number = 5; var obj = { number: 3, fn1: (function () { var number; this.number *= 2; number = number * 2; number = 3; return function () { var num = this.number; this.number *= 2; console.log(num); number *= 3; console.log(number); } })() } var fn1 = obj.fn1; fn1.call(null); obj.fn1(); console.log(window.number); //结果 10 9 3 27 20
var name = ‘window‘ var person1 = { name:‘person1‘, show1:function(){ console.log(this.name); }, show2:()=>console.log(this.name), show3:function(){ return function(){ console.log(this.name); } }, show4:function(){ return ()=>console.log(this.name) } } var person2 = {name:‘person2‘}; person1.show1();//person1 person1.show1.call(person2);//person2 person1.show2();//window person1.show2.call(person2);//window person1.show3()();//person1错 window person1.show3().call(person2);//person2 person1.show3.call(person2)();//person2错 window person1.show4()();//window错 person1 person1.show4().call(person2);//person1 person1.show4.call(person2)();//window错 person2
var name = "hanmeimei"; var f = function(){ var name = "lilei"; return function(){ console.log(this.name); } } f()();//hanmeimei
function getRandom(num){ var numb = []; var newArr = []; while(numb.length<num){ let n = parseInt(Math.random() * 32); if(n>=2&&n<=32){ numb.push(n); newArr = Array.from(new Set(numb)); } } console.log(newArr); //return newArr; } getRandom(10);
// 写出一个数组展开函数, 如输入:[1,[2,[3,4,2],2],5,[6]], 则输出:[1,2,3,4,2,2,5,6] // 因为和深度无关,所以说最简单可以这样 function flatten(arr){ var res = arr.join().split(‘,‘); res = res.map( ele => +ele) return res; } // 还有吗,递归,写一下 function flatten(arr){ var array = []; arr.forEach(ele => { if(Array.isArray(ele)){ array.push(...flatten(ele)); } else { array.push(ele); } }) return array; } var arr1 = [1,[2,[3,4,2],2],5,[6]]; flatten(arr1)
console.log(‘begin‘); setTimeout(() => { console.log(‘setTimeout 1‘); Promise.resolve().then(() => { console.log(‘promise 1‘); setTimeout(() => { console.log(‘setTimeout2 between promise1&2‘); }) }).then(() => { console.log(‘promise 2‘); }); }, 0); console.log(‘end‘);
begin
end
setTimeout 1
promise 1
promise 2
setTimeout2 between promise1&2
console.log(‘script start‘) async function async1() { await async2() console.log(‘async1 end‘) } async function async2() { console.log(‘async2 end‘) } async1() setTimeout(function() { console.log(‘setTimeout‘) }, 0) new Promise(resolve => { console.log(‘Promise‘) resolve() }) .then(function() { console.log(‘promise1‘) }) .then(function() { console.log(‘promise2‘) }) console.log(‘script end‘) //结果 script start end Promise end end promise1 promise2 undefined setTimeout
console.log(Number([1])) if([]==false){console.log(1)}//1 if({}==false){console.log(2)} if([]){console.log(3)}//3 if([1]==[1]){console.log(4)}
function Fibonacci(n) { if (n == 0) { return 1; } var pre = 1, // 前一个值 cur = 1; // 当前值 for (var i = 2; i <= n; i++) { // 更新两个值 cur += pre; pre = cur - pre; } return cur; } function Fibonacci2(n) { var f = [0, 1]; for(let i = 2; i <= n; i++) { f[i] = f[i - 1] + f[i - 2]; } return f[n]; } Fibonacci(5)
var getUrlParam2 = function(sUrl, sKey){ // 捕获组两枚,一枚负责Key 一枚负责获取Value var reg = new RegExp(‘([0-9a-zA-Z%]+)=([0-9a-zA-Z%]+)&*‘, ‘ig‘); // 结果集保存 var result = {}; var temp; var key, value; while(temp = reg.exec(sUrl)) { key = temp[1]; value = temp[2]; if (result[key] && !(result[key] instanceof Array)) { result[key] = [result[key], value]; // 如果发现了第二个同名参数,则从字符串变为数组 } else if (result[key] instanceof Array) { result[key].push(value); // 已经是数组,又找到了,就push进去 } else { result[key] = value; // 第一次,还是普通保存 } } if (sKey) { return result[sKey] ? result[sKey] : ‘‘; // 为了避免undefined的情况 } else { return result; // 返回全部的对象参数 } } getUrlParam2("http://www.nowcoder.com?key=1&key=2&key=3&test=4#hehe")
//http://www.baidu.com?aa=11&callback=my_jsonp04349289664328899 var jsonp = function(url,param,callback){ //处理url地址,查找?,如果没有?这个变量就有一个"?",有?这个变量接收一个& var querystring = url.indexOf("?") == -1?"?":"&"; //处理参数{xx:xx} for(var k in param) { querystring += k + "=" + param[k] + ‘&‘;//?k=para[k] } //处理回调函数名 var random = Math.random().toString().replace(".",""); var cbval = "my_jsonp" + random; var cb = "callback="+cbval; querystring += cb; var script = document.createElement("script"); script.src = url + querystring; //把回调函数的名字附给window window[cbval] = function(param) { //这里执行回调的操作,用回调来处理参数 callback(param); //拿到了就删掉这个script document.body.removeChild(script); }; document.body.appendChild(script); } jsonp( "https://www.baidu.com", {aa:11}, function(){ console.log(param); } );
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> <script type="text/javascript"> // 得到航班信息查询结果后的回调函数 var flightHandler = function(data){ alert(‘你查询的航班结果是:票价 ‘ + data.price + ‘ 元,‘ + ‘余票 ‘ + data.tickets + ‘ 张。‘); }; // 提供jsonp服务的url地址(不管是什么类型的地址,最终生成的返回值都是一段javascript代码) var url = "http://flightQuery.com/jsonp/flightResult.aspx?code=CA1998&callback=flightHandler"; // 创建script标签,设置其属性 var script = document.createElement(‘script‘); script.setAttribute(‘src‘, url); // 把script标签加入head,此时调用开始 document.getElementsByTagName(‘head‘)[0].appendChild(script); </script> </head> <body> </body> </html>
//js的深克隆 function deepCopy(obj){ //判断是否是简单数据类型, if(typeof obj == "object"){ //复杂数据类型 var result = obj.constructor == Array ? [] : {}; for(let i in obj){ result[i] = typeof obj[i] == "object" ? deepCopy(obj[i]) : obj[i]; } }else { //简单数据类型 直接 == 赋值 var result = obj; } return result; }
//判断是否为数组 通过toString()方法 通过constructor 通过instanceof Array.isArray var arr = [1, 2, 3]; var obj = { name: ‘lyl‘, age: 18, 1: ‘name‘ } console.log(Object.prototype.toString.call(arr) === ‘[object Array]‘); //true console.log(Object.prototype.toString.call(boj) === ‘[object Array]‘); //false
// 这里我们创建了一个构造函数 参数就是执行器 function Promise(exector) { // 这里我们将value 成功时候的值 reason失败时候的值放入属性中 let self = this; // 这里我们加入一个状态标识 this.status = ‘pending‘; this.value = undefined; this.reason = undefined; // 成功执行 function resolve(value) { // 判断是否处于pending状态 if (self.status === ‘pending‘) { self.value = value; // 这里我们执行之后需要更改状态 self.status = ‘resolved‘; } } // 失败执行 function reject(reason) { // 判断是否处于pending状态 if (self.status === ‘pending‘) { self.reason = reason; // 这里我们执行之后需要更改状态 self.status = ‘rejected‘; } } // 这里对异常进行处理 try { exector(resolve, reject); } catch(e) { reject(e) } } // 我们将then方法添加到构造函数的原型上 参数分别为成功和失败的回调 Promise.prototype.then = function(onFulfilled, onRejected) { // 获取下this let self = this; if (this.status === ‘resolved‘) { onFulfilled(self.value); } if (this.status === ‘rejected‘) { onRejected(self.reason); } } //运行 let promise = new Promise((resolve, reject) => { resolve("haha"); }) promise.then(data => { console.log(data); //输出 haha }, err=> { console.log(err); }) // 多次调用 promise.then(data => { console.log(data); //输出 haha }, err=> { console.log(err); })
// 当出现连续数字的时候以‘-’输出 [1, 2, 3, 4, 6, 8, 9, 10] // 期望结果 ["1-4", 6, "8-10"] var arrange = function(arr){ var result = [],temp = []; arr.sort(function(source, dest){ return source - dest; }).concat(Infinity).reduce(function(source, dest){ temp.push(source); if(dest-source > 1){ result.push(temp); temp = []; } return dest; }); return result; }; var formatarr = function(arr) { var newArr = [] var arr1 = arrange(arr) for (var i in arr1) { var str = ‘‘; if (arr1[i].length > 1) { str = arr1[i][0] + ‘-‘ + arr1[i][arr1[i].length - 1]; newArr.push(str) } else { newArr.push(arr1[i][0]); } } return newArr; }
function revStr(str){ var temStr = ""; var len = str.length; for(var i=len-1;i>=0;i--){ temStr = str.charAt(i); } return temStr; } //字符串的完全翻转 str.split("").reverse().join("") //翻转字符串中单词顺序,但单词字母顺序不变: function reverseStr(param){ var arr = param.split(" "); var newArr = []; for(i=0;i<arr.length;i++){ newArr[arr.length-i] = arr[i]; } return newArr.join(" "); } document.write(reverseStr("smile at life"));
var str = "hello world";
function isString(str){
if(typeof str == "string" || str.constructor == String){
return true;
}else{
return false;
}
}
if(typeof Array.isArray===‘undefined‘){
Array.isArray=function(arg){
return Object.prototype.tostring.call(rag)===‘[Object Array]‘;
};
}
function findNullOfNum(arr1,arr2){ var str = arr2.split(""); var result = []; for(var i=0,x=0;i<arr1.length;i++){ if(str.indexOf(arr1[i] == -1){ result[x] = arr1[i]; x++; } } return result; }
function select(arr){ var temp=[]; for(var i = 0;i < arr.length;i++){ //indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。ie8不兼容 if(temp.indexOf(arr[i]) == -1){ temp.push(arr[i]); } } return temp; } //具体验证 var arr=[4,5,1,53,5,1,3]; console.log(select(arr)); //includes():判断当前数组是否包含某个值,若有则返回true,若没有则返回false; function select(arr){ var temp=[]; arr.forEach((v)=>{ temp.includes(v)||temp.push(v); }) return temp; } //循环判断 function select(arr){ var temp=[]; for(var i = 0; i < arr.length; i++){ for(var j = i+1; j < arr.length; j++){ if(arr[i] === arr[j]){ j = ++i; } } temp.push(arr[i]); } return temp; }
后续会继续补充······
原文:https://www.cnblogs.com/lxy-starry/p/11302746.html