JS笔试汇总
//console.log(a[b]);
var a={};
var b={key:'b'};
var c={key:'c'};
a[b] = 456;
a[c] = 123;
console.log(a[b]); //"123"
console.log(a[c]); //"123"
var obj1 = {x: 1};
var num1 = 1;
var arr1 = [obj1, num1];
obj1 = {x: 2};
num1 = 2;
console.log(arr1[0].x, arr1[1]);// 1 1 var arr2 = arr1;
obj1.x = 3;
arr1[1] = 3;
console.log(arr2[0].x, arr2[1])//1 3
Promise.resolve().then(() => {
console.log(1);
return Promise.reject();
}).catch(()=>{
console.log(2);
}).catch(()=>{
console.log(3);
}).then(()=>{
console.log(4);
})
// 1 2 4
//
(function(x) {
return (function(y) {
console.log(x);
})(1);
})(2);//"2"
//闭包的应用
for(var i=0;i<5;i++){
setTimeout(function(){
console.log(i);
},1000*i);
}//->5 5 5 5 5 for(var i=1;i<=5;i++){
(function(j){
setTimeout(function(){
console.log(j);
},1000*j);
})(i);
}//->1 2 3 4 5
for(var i=1;i<=5;i++){
(function(i){
setTimeout(function(){
console.log(i);
},1000);
})(i);
}//->1 2 3 4 5
for(var i=1;i<=5;i++){
setTimeout(function(i){
console.log(i);
},1000*i,i);
}//->1 2 3 4 5 for(let i=1;i<=5;i++){
setTimeout(function(){
console.log(i);
},1000*i);
}//->1 2 3 4 5
var fn = function() {
var c = "bbb";
return {
a: function(){
return c;
},
b: function(d) {
c = d;
}
}
}();
console.log(fn.a());//bbb
console.log(fn.b('ccc'));//undefined
console.log(fn.c);//undefined
var out = (function(x){
delete x;
return x;
})(0);
console.log(out);// var x=1;
var out = (function(){
delete x;
return x;
})();
console.log(out);// //
if(10>9>8==true) {
console.log('html');
}else{
console.log('css');
}//css //
var len =0;
function f(){
console.log(this.len);
}
var obj = {
len:5,
met: function(f){
f();
}
};
obj.met(f,1);// //
const data = {};
data===1;//false
data=1;//TypeError
data.size=100;// //
function foo() {
let p;
for(let i=0;i<3;i++){//let声明的i只在块级作用域中有效
if(i==2){
p = function(){//返回值给了外部变量p=2;
return i;
}
}
}
console.log(p());//取值是2而不是3;
console.log(i);//
}
foo();// //
function foo() {
let p;
for(var i=0;i<3;i++){//var 声明的变量全局有效
if(i==2){
p = function(){
return i;//全局的i决定let声明的变量p
}
}
}
console.log(p());//
console.log(i);//
}
foo(); //对象调用方法时总是先从实例中寻找,然后再向原型对象中查找
function A(){
this.fn = function(){
return 1;
}
}
A.prototype.fn = function(){return 2};
var a = new A();
a.fn();// //
function Foo(){
var i=0;
return function(){
console.log(i++);
}
}
var f1 = Foo();
var f2 = Foo();
f1();//
f2();// //
function f1(){
var a = 10;
if(a>5){
var b = 7;
}
console.log(b);
}
function f2(){
var a = 10;
if(a>5){
const b = 7;
}
console.log(b);
}
f1();//
f2();//ReferenceError: b is not defined //
var foo = {
x:1
};
function bar() {
console.log(this.x);
}
bar.apply(foo);//
bar.call(foo);//
bar.bind(foo)();// //重写bind
Function.prototype._bind = function(ctx){
var that=this;
return function(){
return that.apply(ctx, arguments);
};
}
bar._bind(foo)();// //
var F = function(){};
Object.prototype.a = function(){}
Function.prototype.b = function(){};
var f = new F();
'a' in f;//true
'a' in F;//true
'b' in f;//false
'b' in F;//true //
var obj1 = {
x:1
}
var obj2 = Object.create(obj1);
obj1===obj2.__proto__;//true
obj1.hasOwnProperty('x');//true
obj2.hasOwnProperty('x');//false
obj1.x===obj2.x;//true //
const a = /123/gi;
const b = /123/gi;
console.log(a==b);//false
console.log(a===b);//false
var t1 = new Date('2018-07-02');//Mon Jul 02 2018 08:00:00 GMT+0800 (中国标准时间)
var t2 = new Date(2018,07,02);//Thu Aug 02 2018 00:00:00 GMT+0800 (中国标准时间)
t1.getDay();//
t2.getDay();//
t1.getMonth();//
t2.getMonth()//7
t1.getDate();//2
t2.getDate();//2
t1.getTime();//毫秒數
t2.getTime();
t1.getHours();
t1.getMinutes();
t1.getSeconds();
//变量提升
function baidu() {
console.log(val);
var val = 'b';
console.log(val);
}
baidu();// undefined b (function(){
var a = b = 100;
})();
typeof a;//undefined (不能访问私有作用域中的变量)
typeof b;//number (b没有指定类型,自动变为全局变量)
//函数提升与变量提升
console.log(typeof a);
function a(){};
var a;// function com(10,100);//执行函数提升后的最后一个函数
var com = function(a,b){//函数表达式不会被提升
console.info(a*b);
}
function com(a,b) {//函数声明被提升到顶部
console.info(a+b);
}
function com(){//函数声明被提升到顶部
console.info((a+b)*2);
}
com(2,10);执行函数表达式;
// 220 20
//trim实现去除首尾空格
function trim(str){
return str.replace(/(^\s*)|(\s*$)/g, "");
}
trim(" a bc de ");//"a bc de" "1.2.3".split('') //的等价方法
"1.2.3".split(/(\.)/); var s1 = new String('fe');
var s2 = new String('fe');
console.log(s1==s2)//false
console.log(s1===s2)//false var foo = 10+'20'-10//
console.log(" AB"<" CD")//true
//函数长度
(function(a,b,c){}).length;//
(function(a,b,c=3){}).length;//
(function(a=1,b,c){}).length;//
(function(a,b=2,c){}).length;//
//打印数组中重复元素
function dedupe(array) {
var newArr = [];
var no =[];
for(var i=0; i<array.length; i++) {
if(newArr.indexOf(array[i]) == -1) {
newArr.push(array[i]);
} else {
no.push(array[i]);
}
}
return no;
}
var arr = [1, 1, 2, 3, 4, 5, 5];
console.log(dedupe(arr));//[1, 2, 3]
const timeout = ms => new Promise((resolve, reject) => {
setTimeout(() => {
resolve();
}, ms);
}); const ajax1 = () => timeout(2000).then(() => {
console.log('1');
return 1;
}); const ajax2 = () => timeout(1000).then(() => {
console.log('2');
return 2;
}); const ajax3 = () => timeout(2000).then(() => {
console.log('3');
return 3;
}); const mergePromise = ajaxArray => {
// 在这里实现你的代码
var data=[];
var res = Promise.resolve();
ajaxArray.forEach(function(item){
res = res.then(item).then(function(ref) {
data.push(ref);
return data;
});
});
return res;
}; mergePromise([ajax1,ajax2,ajax3]).then(data => {
console.log('done');
console.log(data);
});
//
//1
//2
//3
//done
//[1,2,3]
//重写 console.log()
//1.
console.log = (function(self) {
return function(){
var args = Array.prototype.slice.call(arguments, 0);
self.apply(console, args);
}
})(console.log);
//2.
var log = console.log;
console.log = function(text) {
var args = Array.prototype.slice.call(arguments, 0);
log.apply(console, args);
};
console.log([1,2,3,[1,2,3]]);
//重写indexOf
Array.prototype.indexOf = function(searchElement){
var index,
_arguments = this,
args = Array.prototype.slice.call(_arguments),
count=0;
for(var x in args){
if(args[x] === searchElement)
{
index = x;
count=1;
break;
}
}
if(!count)
return -1;
return index;
};
var arr = [1,2,3,4,5,6];
var index = arr.indexOf(6);
console.log(index);
// wrap: 3
// arr: [1,2,3,4,5,6,7,8]
// output: 7 8 4 5 6 1 2 3 function flatten(arr) {
var res = [];
for(var item of arr){
if(Array.isArray(item)){
var child = flatten(item);
//res = res.concat(child);
res.push(...child);
}
else
res.push(item);
}
return res;
}
function groupOutput(wrap, arr) {
var newarr=[], len = arr.length;
for(var i=0;i<len; i=i+wrap){
var args = arr.slice(i,i+wrap);
newarr.push(args);
}
newarr.reverse();
return flatten(newarr);
}
var res = groupOutput(5,[1,2,3,4,5,6,7,8]);
console.log(res);
//使instanceof判断某个对象是否是数组时返回false
//instanceof操作符有一个问题就是,它假定只有一个全局作用域。
//如果一个网页中有多个框架(iframe元素),那实际上就存在两个以上不同的全局执行环境,从而存在两个以上不同版本的Array构造函数。
//如果你从一个框架向另一个框架传入一个数组,那么传入的数组与在第二个框架中原生创建的数组分别具有各自不同的构造函数。
//传入的数组在该框架中用instanceof操作符判断就会返回false。
var frame=document.createElement("iframe");//创建一个框架
document.body.appendChild(frame);
var c=window.frames[0].Array;//取得框架全局执行环境中的Array构造函数
var d=new c();//在框架全局执行环境中创建一个数组d
console.log(d instanceof Array);//在当前页面的执行环境中用instanceof操作符判断d是否为数组,返回false
console.log(Array.isArray(d));//true
//获取两个时间相差的小时数
function getHour(t1,t2){
var res;
//判断日期格式是否是正确的
if(!(isNaN(t1)&&!isNaN(Date.parse(t1)))||!(isNaN(t2)&&!isNaN(Date.parse(t2)))){
console.log('0');
return;
}
t1 = new Date(t1.replace(/-/g, '/'));
t2 = new Date(t2.replace(/-/g, '/'));
var ms = Math.abs(t1.getTime()-t2.getTime());
var hour = Math.floor(ms/1000/60/60);
var min = Math.floor(ms/1000/60);
if(min%60>=0&&min%60<=29)
res = hour;
else
res = hour+0.5;
console.log(res);
}
getHour('2018-9-15 13:13','2018-9-17 13:45');
//顺丰笔试
function compare(str, str1) {
var map = {},res=[],ans;
var len = str.length,
len1 = str1.length;
for(var i=0;i<len;i++){
if(str1.indexOf(str[i])===-1)
res.push(str[i]);
}
for(var j=0;j<len1;j++){
if(str.indexOf(str1[j])===-1)
res.push(str1[j]);
}
//去重
for(var j=0;j<res.length;j++){
map[res[j]] = res[j];
}
var arr = [];
for(var key in map){
arr.push(key);
}
arr.sort();
var ans = arr.join('') + arr.reverse().join('');
return ans;
}
compare("afsd", "efrdgg");//"aegrssrgea"
//螺旋矩阵
function handler(num1, num2, num3){
var cnt=1;
while(num2!=num1 && num3!=num1 && num2>1 && num3>1){
num2--;num3--;
cnt+=(4*(num1-1));
num1-=2;
}
var x = 1,y=1;
var flag = true;
while(flag && x+1<=num1){if(x===num3 && y===num2){console.log(cnt);flag = false;}else{x++;cnt++;}}
while(flag && y+1<=num1){if(x===num3 && y===num2){console.log(cnt);flag = false;}else{y++;cnt++;}}
while(flag && x-1>=1){if(x===num3 && y===num2){console.log(cnt);flag = false;}else{x--;cnt++;}}
while(flag && y-1>=1){if(x===num3 && y===num2){console.log(cnt);flag = false;}else{y--;cnt++;}}
if(num1===1) console.log(cnt);
}
handler(4, 3, 3);
//2. 长度为n的数组分割为k段,让完成任务的工期取得最小;
JS笔试汇总的更多相关文章
- 常见算法是js实现汇总(转载)
常见算法是js实现汇总 /*去重*/ <script> function delRepeat(arr){ var newArray=new Array(); var len=arr.len ...
- 最新Node.js 资源汇总
Node.js 资源汇总 文档 Node.js 官方文档:http://nodejs.org/api/ Node.js 中文文档:http://nodejs.jsbin.cn/api/ Express ...
- JS循环汇总
JS循环汇总 一.总结 一句话总结:js中的循环主要有while.for.for...in.for...of,循环是,要区别不同的循环对象,比如对象,数组,集合等 while for for...in ...
- 微信JS接口汇总及使用详解
这篇文章主要介绍了微信JS接口汇总及使用详解,十分的全面.详尽,包含分享到朋友圈,分享给朋友,分享到QQ,拍照或从手机相册中选图,识别音频并返回识别结果,使用微信内置地图查看位置等接口,有需要的小伙伴 ...
- 调用手机端硬件功能 汇总(android/ios) Native.js示例汇总
Native.js示例汇总 NJS Native.JS 示例 Native.js虽然强大和开放,但很多web开发者因为不熟悉原生API而难以独立完成.这篇帖子的目的就是汇总各种写好的NJS代码,方便w ...
- 前端Js框架汇总(工具多看)
前端Js框架汇总(工具多看) 一.总结 一句话总结: 二.前端Js框架汇总 概述: 有些日子没有正襟危坐写博客了,互联网飞速发展的时代,技术更新迭代的速度也在加快.看着Java.Js.Swift在各领 ...
- node.js使用汇总贴
金天:学习一个新东西,就要持有拥抱的心态,如果固守在自己先前的概念体系,就会有举步维艰的感觉..NET程序员初用node.js最需要适应的就是异步开发,以及弱类型语言难以避免的拼写错误与弱小的语法提示 ...
- Native.js示例汇总
Native.js虽然强大和开放,但很多web开发者因为不熟悉原生API而难以独立完成.这篇帖子的目的就是汇总各种写好的NJS代码,方便web开发者.众人拾柴火焰高,有能力的开发者多多提交NJS代码, ...
- linq to js使用汇总
用途:方便js操作查询json数据. 下载网址:http://jslinq.codeplex.com/ 使用方法:只需要引用linq.js即可. 查询方法: 一.where查询 var myList ...
随机推荐
- Quartz使用(3) - Quartz核心接口Trigger
Trigger最常用的有两种SimpleTrigger和CronTrigger,首先介绍Trigger的一些基础的信息,然后会详细描述这两种Trigger. 1. 通用Trigger属性 quartz ...
- 基于JQUERY 的图片查看插件
viewer是一款功能强大的图片查看器.它可以实现ACDsee等看图软件的部分功能.它可以对图片进行移动,缩放,旋转,翻转,可以前后浏览一组图片.该图片查看器还支持移动设备,支持键盘控制,功能十分强大 ...
- c#实体转化
经常会遇到把一个实体转化成另一个实体这样的情况,实体的属性一个一个手写去转化不反对,但不是啥好的方法:可以使用反射写一个通用的实体转化类,针对任何实体转化,不用再去自己手写. public stati ...
- MVC分页技术
这个是用的插件分页技术 前台引用和js <script type="text/javascript" src="/js/jquery-1.10.2.min.js&q ...
- Oracle入门基础(1)
1.数据库系统和数据管理系统的区别? 数据库系统=数据库的管理系统+oper操作员+硬件 2.Oracle的版本 8i /9i 10g/11g 12c(cloud) 3.Oracle主要组 ...
- Differences or similarities between Java and C++
“作为一名C++程序员,我们早已掌握了面向对象Object-oriented Programming程序设计的基本概念,而且Java的语法无疑是非常熟悉的.事实上,Java本来就是从C++衍生出来的. ...
- css3 走马灯效果
纯css3实现了一个正六边形的走马灯效果,记录一下css3动画的学习情况,效果如下: 主要用到的css3技术有:keyframes.perspective.perspective-origin.tra ...
- [UnityShader]点染队列、ZWrite和ZTest
转载自:http://www.myexception.cn/mobile/1902628.html [UnityShader]渲染队列.ZWrite和ZTest 参考链接:http://blog.cs ...
- XFS: Cross Frame Script (跨框架脚本) 攻击。
一.Cross Frame Script (跨框架脚本) 攻击什么是Cross Frame Script?很简单,做个实验就知道了.把下面的这段HTML代码另存为一个html文件,然后用ie浏览器打开 ...
- LeetCode Path Sum 判断树的路径之和
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; ...