哪个网站的广州日租房拍摄场地好?

查看: 4157|回复: 11
如何设置if函数公式实现根据代码返回部门名称
阅读权限20
在线时间 小时
各位大侠,
本人想用IF函数 =IF(LEFT(A2)=&Y&,&研发部&,IF(LEFT(A2)=X,&销售部&,IF(LEFT(A2)=&S&,&生产部&,&&)))
实现根据A列的代码首字母把部门名称填写到C列,但是不知道出了什么问题,有些部门显示不出来,具体例子请看下图和附件
(6.5 KB, 下载次数: 21)
10:21 上传
点击文件名下载附件
hanshu.jpg (14.83 KB, 下载次数: 74)
10:19 上传
阅读权限50
在线时间 小时
不用看附件就知道 楼主第二部分IF嵌套&&IF(LEFT(A2)=X,& && & X 应该有双引号 ”X”
阅读权限70
在线时间 小时
X要加上引号。=IF(LEFT(A2)=&Y&,&研发部&,IF(LEFT(A2)=&X&,&销售部&,IF(LEFT(A2)=&S&,&生产部&,&&)))
阅读权限95
在线时间 小时
& && && && && && &&&
阅读权限20
在线时间 小时
smupsu 发表于
不用看附件就知道 楼主第二部分IF嵌套&&IF(LEFT(A2)=X,& && & X 应该有双引号 ”X”
谢谢大侠,我检查了N遍都没发现这个问题,还是你们细心如尘哦{:soso_e179:}
这个案例说明了做数据分析要超级细心,错一步就满盘皆输。{:soso_e129:}
阅读权限20
在线时间 小时
补充问:这部门总数比较少,用IF就能解决,如果部门比较多用IF就比较麻烦,请问有没有更好的办法解决?
阅读权限20
在线时间 小时
=IF(LEFT(A3)=&Y&,&研发部&,IF(LEFT(A3)=&X&,&销售部&,IF(LEFT(A3)=&S&,&生产部&,&&)))
阅读权限50
在线时间 小时
本帖最后由 smupsu 于
10:48 编辑
那就建立一个字典表,第一列是字母,每二列是部门
然后工作中用VLOOKUP来查找(其实VLOOKUP可以解释用常量数组,直接把字典表以数组形式敲到VLOOKUP的第二参数里)
10:48 上传
点击文件名下载附件
7.39 KB, 下载次数: 56
阅读权限20
在线时间 小时
猎妖师 发表于
补充问:这部门总数比较少,用IF就能解决,如果部门比较多用IF就比较麻烦,请问有没有更好的办法解决?
这个问题提的非常好,我也想知道,建议单独另起一个帖子来求助{:soso_e100:}
阅读权限20
在线时间 小时
yanyan6026 发表于
这个问题提的非常好,我也想知道,建议单独另起一个帖子来求助
对,用8楼的做法可以实现,用vlookup来做。
最新热点 /1
人人都要过六一,当当网ExcelHome部分图书4.9折封顶,莫失良机!
玩命加载中,请稍候
玩命加载中,请稍候
Powered by
本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任! & & 本站特聘法律顾问:徐怀玉律师 李志群律师21ic官方微信-->
后使用快捷导航没有帐号?
查看: 7529|回复: 11
求 定点ATAN2函数代码(最好是查表法)
&&已结帖(0)
主题帖子积分
主题帖子积分
专家等级:结帖率:3%
主题帖子积分
求一个定点、浮点的ATAN2代码,速度要比库的快。
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
技术达人, 积分 8686, 距离下一级还需 1314 积分
技术达人, 积分 8686, 距离下一级还需 1314 积分
主题帖子积分
专家等级:结帖率:20%
主题帖子积分
技术达人, 积分 8686, 距离下一级还需 1314 积分
技术达人, 积分 8686, 距离下一级还需 1314 积分
靠,这个还用求?
动动脑子,很简单的!
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
主题帖子积分
专家等级:结帖率:3%
主题帖子积分
楼上有吗?反正切函数!
要求&1.速度更快最好是定点查表法,如果是浮点查表法我可以把它转为定点的问题不大。
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
主题帖子积分
专家等级:结帖率:3%
主题帖子积分
我用IAR的库,浮点才250个时钟。而我自己的一个定点的ARCTAN2竟然要650个时钟周期!真晕死!&&这里专攻算法的朋友指教。还有我刚接触用DSP做变频电源,变频器、空间矢量控制、三相电机。寻可以交流的朋友,在21IC的&DPCI&、STM32、DSP版面&和&电源网。
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
主题帖子积分
专家等级:结帖率:3%
主题帖子积分
从新测试了一次。
使用编译器的库&ATAN2(flaot&y,float&x)要&1899&个时钟而自己最新的&&&atan2(int32&y,int32&x)才&370&&个时钟!误差允许的范围内,使用虚拟浮点库(定点算法)确实比使用浮点算法快好多!难怪TI大肆宣传它的IQMATH库。
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
技术达人, 积分 8686, 距离下一级还需 1314 积分
技术达人, 积分 8686, 距离下一级还需 1314 积分
主题帖子积分
专家等级:结帖率:20%
主题帖子积分
技术达人, 积分 8686, 距离下一级还需 1314 积分
技术达人, 积分 8686, 距离下一级还需 1314 积分
这个表格很好做的不要做ATAN2函数,而是做ATAN,入口参数为&正切值,而不是x,y值。1:0--45度,对应的正切值小于1,所以,用VC做一个程序,调用浮点库的ATAN,例如,你想输入的值为(0.001-1.00),步进0.001,做成MyATAN表格,这个会吧?2:大于45度的值,用坐标变换。3:调用方法&&&先求x,y的绝对值,Xabs,Y&&&if(Xabs&ltYabs)&&&{&&&&&&&input=(1000*Xabs)/Yabs;&&&&&&&Angle=MyATAN[input];&&&}&&&else&&&{&&&&&&&input=(1000*Yabs)/Xabs;&&&&&&&Angle=90000-MyATAN[input];&&&}&&&在根据x,y的正负进行象限变换,求出角度真实值!
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
技术达人, 积分 8686, 距离下一级还需 1314 积分
技术达人, 积分 8686, 距离下一级还需 1314 积分
主题帖子积分
专家等级:结帖率:20%
主题帖子积分
技术达人, 积分 8686, 距离下一级还需 1314 积分
技术达人, 积分 8686, 距离下一级还需 1314 积分
我的原则是,没有浮点的CPU,坚决不用浮点!
所有函数,坚决不能调用浮点库函数。这些函数,做成定点的,都很简单,动动脑子!
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
主题帖子积分
专家等级:结帖率:3%
主题帖子积分
如果是查表法,估计不用40个时钟周期,这个爽多了!顺便贴个&DSPIC&的&atan2函数:&&&&;&include&common&definitions&&&&.nolist&&&&.include&&dspcommon.inc&&&&&.list&&&&;&constant&definitions&&&&.equ&&&&&NEG_PI_BY_2,&&&&0xC000&&&&.equ&&&&PI_BY_2,&&&&0x3FFF&&&&.equ&&&&PI,&&&&&&&&0x7FFF&&&&.equ&&&&NEG_PI,&&&&&&&&0x8000&&&&.equ&&&&ACCUM_PHASE,&w7&&&&;&in&this&table&are&the&values&of&atan(n)&scaled&into&the&range&0&toΠ&and&then&converted&into&fractional&format&&&&.section&.dataCORDIC_DATA:&&&&.word&0x2000&&&&;&atan(1.0)&/&PI&&&&.word&0x12E4&&&&;&atan(0.5)&/&PI&&&&.word&0x09FB&&&&;&atan(0.25)&/&PI&&&&.word&0x0511&&&&;&atan(0.125)&/&PI&&&&.word&0x028B&&&&;&atan(0.0625)&/&PI&&&&.word&0x0146&&&&;&etc&&&&.word&0x00A3&&&&.word&0x0051&&&&.word&0x0029&&&&.word&0x0014&&&&.word&0x000A&&&&.word&0x0005&&&&.word&0x0003&&&&.word&0x0001&&&&.word&0x0001&&&&.word&0x0000;&place&the&atan2&CORDIC&function&into&a&special&section&for&dspExtensions&&&&.section&.dspExtensions,&code;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;&&&&_atan2CORDIC:&Perform&an&inverse&tangent&operation&using;&&&&CORDIC&iterative&approximation.&The&parameters&are&assumed;&&&&to&be&dsPIC&fractionals&and&the&return&value&is&a&dsPIC&fractional;&&&&with&a&value&from&-PI&to&PI&scaled&into&the&range&-1.0&to&0.999;&&&&(to&allow&full&scale&use&of&the&dsPIC&fractional&type);;&&&&On&entry:;&&&&W0&=&q;&&&&W1&=&i;&&&&On&Exit:;&&&&W0&=&atan2(q,&i);&&&Uses:;&&&&ACCA&=&rotated&I&value&during&calculation;&&&&ACCB&=&rotated&Q&value&during&calculation;&&&&1&word&on&stack&to&store&temporary&I&value;&&&&w4&=&current&phase&offset;&&&&w5&=&K&(series&divider&1.0,&0.5,&0.25&etc);&&&&w6&=&Q&value&(16&bit&version&of&ACCB);&&&&w7&=&Accumulated&phase;&&&&w8&=&Pointer&to&CORDIC&table;&&&&w9&=&Pointer&to&storage&word&on&stack&(assumes&X&mem);;&&&&A&conventional&CORDIC&routine&can&achieve&its&result&by;&&&&&just&using&shifts&and&adds.&However&this&routine&takes;&&&&advantage&of&the&DSP&mac&and&msc&to&achieve&the&same&result;&&&&it&also&relies&on&the&single&cycle&preload&architecture&to;&&&&get&parameters&for&the&next&operation&into&place.;&&&There&are&bounds&checking&for&y&=&-1&and&x&=&-1&other&than;&&&&that&the&data&is&assumed&to&be&correctly&scaled&and&normalized;&&&&in&the&range&-1.0&to&0.999&(0x8000&to&7FFF);&&&&Apart&from&at&the&extrema&the&results&agree&with&those&returned;&&&&&by&the&standard&atan2&library&routine&to&within&0.05&degrees;;&&&&Total&cycle&count&is&185&cycles&for&any&rational&value;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;&&&&.global&_atan2CORDIC&&&&&&&&_atan2CORDIC:&&&&lnk&&&&&&&&#0x02&&&&&&&&;&reserve&2&bytes&for&storage&&&&push&&&&w8&&&&push&&&&w9&&&&push&&&&CORCON&&&&fractsetup&w8&&&&&&&&;&check&for&values&that&cause&errors&&&&&;&due&to&asymptotic&atan&behaviour&&&&mov&&&&&&&&#0x8000,&w8&&&&&&&&&&&&&;Pointer&to&CORDIC&table&&&&cp&&&&&&&&w0,&w8&&&&&&&&&&&&;&Q&=&-1.0&?&W0&=&q&&&&bra&&&&&&&&NZ,&checkI&&&&mov&&&&&&&&#NEG_PI_BY_2,&w0&&&&bra&&&&&&&&exitCORDICRoutinecheckI:&&&&cp&&&&&&&&w1,&w8&&&&&&&&&&&&;&I&=&-1.0&&&W1&=&i&&&&bra&&&&&&&&NZ,&mainCORDICRoutine&&&&mov&&&&&&&&#PI,&w0&&&&bra&&&&&&&&exitCORDICRoutinemainCORDICRoutine:&&&&;&set&w9&to&point&to&the&reserved&2&byte&space&&&&;&this&can&then&be&used&to&preload&w6&in&the&dsp&MACs&&&&mov&&&&&&&&w14,&w9&&&&&&&&&&&&;&ACCUM_PHASE&(w7)&is&the&total&phase&angle&calculated&&&&clr&&&&&&&&ACCUM_PHASE&&&&&&&&;&adjust&q&and&i&to&be&in&quadrant&I&&&&cp0&&&&&&&&w1&&&&bra&&&&&&&&NN,&setupIter&&&&mov&&&&&&&&w1,&[w9]&&&&&&&&;&w2&=&temporary&I&&&&cp0&&&&&&&&w0&&&&bra&&&&&&&&LE,&quadIII&&&&mov&&&&&&&&w0,&w1&&&&neg&&&&&&&&[w9],&w0&&&&mov&&&&&&&&#NEG_PI_BY_2,&ACCUM_PHASE&&&&bra&&&&&&&&setupIterquadIII:&&&&neg&&&&&&&&w0,&w1&&&&mov&&&&&&&&[w9],&w0&&&&mov&&&&&&&&#PI_BY_2,&ACCUM_PHASEsetupIter:&&&&;&set&ACCA&and&ACCB&to&equal&I&and&Q&&&&&&&&lac&&&&&&&&w0,&#1,&B&&&&lac&&&&&&&&w1,&#1,&A&&&&&&&&mov&&&&&&&&#CORDIC_DATA,&w8&&&&;&w8&points&to&CORDIC&data&table&&&&mov&&&&&&&&#0x7FFF,&w5&&&&&&&&;&w5&=&K&=&1.0&&K&(series&divider&1.0,&0.5,&0.25&etc)&&&&&&&&do&&&&&&&&#14,&endCORDICRoutine&&&&sac.r&&&&a,&[w9]&&&&&&&&&&&&&&&&;&put&I&onto&local&stack&&&&sac.r&&&&b,&w6&&&&&&&&&&&&&&&&;&w6&=&Q&&&&cp0&&&&&&&&w6&&&&&&&&&&&&;&if&Q&&lt&0&goto&rotate&positive&&&&bra&&&&&&&&N,&rotate_posrotate_neg:&&&&mac&&&&&&&&w5*w6,&a,&[w9],&w6&&&&;&I&=&I&+&Q&*&K,&w6&=&temp&I&K&(series&divider&1.0,&0.5,&0.25&etc)&&&&msc&&&&&&&&w5*w6,&b,&[w8]+=2,&w4&&&&;&Q&=&Q&-&oldI&*&K&K&(series&divider&1.0,&0.5,&0.25&etc)&&&&subbr&&&&w4,&ACCUM_PHASE,&ACCUM_PHASE&&&&bra&&&&&&&&endCORDICRoutinerotate_pos:&&&&msc&&&&&&&&w5*w6,&a,&[w9],&w6&&&&;&I&=&I&-&Q&*&K,&w6&=&temp&I&&&&mac&&&&&&&&w5*w6,&b,&[w8]+=2,&w4&&&&;&Q&=&Q&+&oldI&*&K&&&&add&&&&&w4,&ACCUM_PHASE,&ACCUM_PHASE&&&&endCORDICRoutine:&&&&lsr&&&&&&&&w5,&w5&&&&&&&&&&&&;&K&=&K&/&2&&&&neg&&&&&&&&ACCUM_PHASE,&w0&&&&&&&&;&reverse&the&signexitCORDICRoutine:&&&&&&&&pop&&&&&CORCON&&&&pop&&&&&&&&w9&&&&pop&&&&&w8&&&&ulnk&&&&return&&&&.end
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
技术达人, 积分 8686, 距离下一级还需 1314 积分
技术达人, 积分 8686, 距离下一级还需 1314 积分
主题帖子积分
专家等级:结帖率:20%
主题帖子积分
技术达人, 积分 8686, 距离下一级还需 1314 积分
技术达人, 积分 8686, 距离下一级还需 1314 积分
还没看明白?
当然是查表法了!
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
主题帖子积分
专家等级:结帖率:3%
主题帖子积分
呵呵!我的博客已经加入ATAN2算法,
速度非常快。
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
资深技术员, 积分 444, 距离下一级还需 56 积分
资深技术员, 积分 444, 距离下一级还需 56 积分
主题帖子积分
专家等级:结帖率:75%
主题帖子积分
资深技术员, 积分 444, 距离下一级还需 56 积分
资深技术员, 积分 444, 距离下一级还需 56 积分
NETJOB 发表于
速度非常快。
没看到您的博客有atan2啊,可否给个地址?
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
助理工程师, 积分 1267, 距离下一级还需 733 积分
助理工程师, 积分 1267, 距离下一级还需 733 积分
主题帖子积分
专家等级:结帖率:100%打赏:0.00受赏:31.00
主题帖子积分
助理工程师, 积分 1267, 距离下一级还需 733 积分
助理工程师, 积分 1267, 距离下一级还需 733 积分
Dylan疾风闪电
QQ:26****683
学海无涯,蝴蝶粉(STM32F全系列)
技术奇才奖章
人才类勋章
时间类勋章
精英会员奖章
等级类勋章
涓涓之细流
发帖类勋章
时间类勋章
技术高手奖章
人才类勋章
甘甜之泉水
发帖类勋章
希望之星奖章
等级类勋章
热门推荐 /1(某个群友)/coco1s/  
&&&& 很多面试题是我自己面试BAT亲身经历碰到的。整理分享出来希望更多的前端er共同进步吧,不仅适用于求职者,对于巩固复习js更是大有裨益。
  而更多的题目是我一路以来收集的,也有往年的,答案不确保一定正确,如有错误或有更好的解法,还请斧正。
  附上第二篇:
  前面几题是会很基础,越下越有深度。
  初级Javascript:
  1.JavaScript是一门什么样的语言,它有哪些特点?
  没有标准答案。
  2.JavaScript的数据类型都有什么?
  基本数据类型:String,boolean,Number,Undefined,&Null
  引用数据类型:Object(Array,Date,RegExp,Function)
  那么问题来了,如何判断某变量是否为数组数据类型?
方法一.判断其是否具有&数组性质&,如slice()方法。可自己给该变量定义slice方法,故有时会失效
方法二.obj instanceof Array 在某些IE版本中不正确
方法三.方法一二皆有漏洞,在ECMA Script5中定义了新方法Array.isArray(), 保证其兼容性,最好的方法如下:
1 if(typeof Array.isArray==="undefined")
Array.isArray = function(arg){
return Object.prototype.toString.call(arg)==="[object Array]"
  3.已知ID的Input输入框,希望获取这个输入框的输入值,怎么做?(不使用第三方框架)
1 document.getElementById(&ID&).value
  4.希望获取到页面中所有的checkbox怎么做?(不使用第三方框架)
1 var domList = document.getElementsByTagName(&input&)
2 var checkBoxList = [];
3 var len = domList.  //缓存到局部变量
4 while (len--) {  //使用while的效率会比for循环更高
5   if (domList[len].type == &checkbox&) {
  checkBoxList.push(domList[len]);
  5.设置一个已知ID的DIV的html内容为xxxx,字体颜色设置为黑色(不使用第三方框架)
1 var dom = document.getElementById(&ID&);
2 dom.innerHTML = &xxxx&
3 dom.style.color = &#000&
  6.当一个DOM节点被点击时候,我们希望能够执行一个函数,应该怎么做?
&直接在DOM里绑定事件:&div&onclick=&test()&&&/div&
&在JS里通过onclick绑定:xxx.onclick&=&test&
&通过事件添加进行绑定:addEventListener(xxx,&&click&,&test)&
  那么问题来了,Javascript的事件流模型都有什么?
&事件冒泡&:事件开始由最具体的元素接受,然后逐级向上传播
&事件捕捉&:事件由最不具体的节点先接收,然后逐级向下,一直到最具体的
&DOM事件流&:三个阶段:事件捕捉,目标阶段,事件冒泡
  7.什么是Ajax和JSON,它们的优缺点。
  Ajax是异步JavaScript和XML,用于在Web页面中实现异步数据交互。
  优点:
可以使得页面不重载全部内容的情况下加载局部内容,降低数据传输量
避免用户不断刷新或者跳转页面,提高用户体验
  缺点:
对搜索引擎不友好(
要实现ajax下的前后退功能成本较大
可能造成请求数的增加
跨域问题限制
  JSON是一种轻量级的数据交换格式,ECMA的一个子集
  优点:轻量级、易于人的阅读和编写,便于机器(JavaScript)解析,支持复合数据类型(数组、对象、字符串、数字)
  8.看下列代码输出为何?解释原因。
2 alert(typeof a); // undefined
3 alert(b); // 报错
  解释:Undefined是一个只有一个值的数据类型,这个值就是&undefined&,在使用var声明变量但并未对其赋值进行初始化时,这个变量的值就是undefined。而b由于未声明将报错。注意未申明的变量和声明了未赋值的是不一样的。
  9.看下列代码,输出什么?解释原因。
1 var a = null;
2 alert(typeof a); //object
  解释:null是一个只有一个值的数据类型,这个值就是null。表示一个空指针对象,所以用typeof检测会返回&object&。
  10.看下列代码,输出什么?解释原因。
2 undefined == null; // true
3 1 == true;&& // true
4 2 == true;&& // false
5 0 == false;& // true
6 0 == '';&&&& // true
7 NaN == NaN;& // false
8 [] == false; // true
9 [] == ![];&& // true
undefined与null相等,但不恒等(===)
一个是number一个是string时,会尝试将string转换为number
尝试将boolean转换为number,0或1
尝试将Object转换成number或string,取决于另外一个对比量的类型
所以,对于0、空字符串的判断,建议使用&&===&&。&===&会先判断两边的值类型,类型不匹配时为false。
  那么问题来了,看下面的代码,输出什么,foo的类型为什么?
1 var foo = "11"+2-"1";
2 console.log(foo);
3 console.log(typeof foo);
  执行完后foo的值为111,foo的类型为Number。
1 var foo = "11"+2+"1";
//体会加一个字符串'1' 和 减去一个字符串'1'的不同
2 console.log(foo);
3 console.log(typeof foo);
  执行完后foo的值为1121(此处是字符串拼接),foo的类型为String。
  11.看代码给答案。
1 var a = new Object();
2 a.value = 1;
4 b.value = 2;
5 alert(a.value);
  答案:2(考察引用数据类型细节)
  12.已知数组var&stringArray&=&[&This&,&&is&,&&Baidu&,&&Campus&],Alert出&This&is&Baidu&Campus&。
  答案:alert(stringArray.join(" "))
  那么问题来了,已知有字符串foo="get-element-by-id",写一个function将其转化成驼峰表示法"getElementById"。
1 function combo(msg){
var arr = msg.split("-");
var len = arr.
//将arr.length存储在一个局部变量可以提高for循环效率
for(var i=1;i&i++){
arr[i]=arr[i].charAt(0).toUpperCase()+arr[i].substr(1,arr[i].length-1);
msg=arr.join("");
  (考察基础API)
  13.var&numberArray&=&[3,6,2,4,1,5]; (考察基础API)
  1)&实现对该数组的倒排,输出[5,1,4,2,6,3]
  2)&实现对该数组的降序排列,输出[6,5,4,3,2,1]
1 var numberArray = [3,6,2,4,1,5];
3 numberArray.reverse(); // 5,1,4,2,6,3
5 numberArray.sort(function(a,b){
//6,5,4,3,2,1
return b-a;
  14.输出今天的日期,以YYYY-MM-DD的方式,比如今天是日,则输出
1 var d = new Date();
2 // 获取年,getFullYear()返回4位的数字
3 var year = d.getFullYear();
4 // 获取月,月份比较特殊,0是1月,11是12月
5 var month = d.getMonth() + 1;
6 // 变成两位
7 month = month & 10 ? '0' + month :
8 // 获取日
9 var day = d.getDate();
10 day = day & 10 ? '0' + day :
11 alert(year + '-' + month + '-' + day);
  15.将字符串&&tr&&td&{$id}&/td&&td&{$name}&/td&&/tr&&中的{$id}替换成10,{$name}替换成Tony (使用正则表达式)
  答案:"&tr&&td&{$id}&/td&&td&{$id}_{$name}&/td&&/tr&".replace(/{\$id}/g,&'10').replace(/{\$name}/g,&&Tony&);
  16.为了保证页面输出安全,我们经常需要对一些特殊的字符进行转义,请写一个函数escapeHtml,将&,&&,&&,&&进行转义
1 function escapeHtml(str) {
2 return str.replace(/[&&&&]/g, function(match) {
switch (match) {
return &&&;
return &&&;
return &&&;
case &\&&:
return &&&;
  17.foo = foo||bar ,这行代码是什么意思?为什么要这样写?
  答案:if(!foo)&foo&=&&//如果foo存在,值不变,否则把bar的值赋给foo。
  短路表达式:作为"&&"和"||"操作符的操作数表达式,这些表达式在进行求值时,只要最终的结果已经可以确定是真或假,求值过程便告终止,这称之为短路求值。
  18.看下列代码,将会输出什么?(变量声明提升)
1 var foo = 1;
2 function(){
console.log(foo);
var foo = 2;
console.log(foo);
  答案:输出undefined 和 2。上面代码相当于:
1 var foo = 1;
2 function(){
console.log(foo); //undefined
console.log(foo); // 2;
  函数声明与变量声明会被JavaScript引擎隐式地提升到当前作用域的顶部,但是只提升名称不会提升赋值部分。
  19.用js实现随机选取10--100之间的10个数字,存入一个数组,并排序。
1 var iArray = [];&
2 funtion getRandom(istart, iend){
3 &&&&&&& var iChoice = istart - iend +1;
4 &&&&&&& return Math.floor(Math.random() * iChoice +
6 for(var i=0; i&10; i++){
7 &&&&&&& iArray.push(getRandom(10,100));
9 iArray.sort();
  20.把两个数组合并,并删除第二个元素。
1 var array1 = ['a','b','c'];
2 var bArray = ['d','e','f'];
3 var cArray = array1.concat(bArray);
4 cArray.splice(1,1);
  21.怎样添加、移除、移动、复制、创建和查找节点(原生JS,实在基础,没细写每一步)
  1)创建新节点
&&&&&&createDocumentFragment()&&&&//创建一个DOM片段
&&&&&&createElement()&&&//创建一个具体的元素
&&&&&&createTextNode()&&&//创建一个文本节点
  2)添加、移除、替换、插入
&&&&&&appendChild()&&&&&&//添加
&&&&&&removeChild()&&&&&&//移除
&&&&&&replaceChild()&&&&&&//替换
&&&&&&insertBefore()&&&&&&//插入
  3)查找
&&&&&&getElementsByTagName()&&&&//通过标签名称
&&&&&&getElementsByName()&&&&&//通过元素的Name属性的值
&&&&&&getElementById()&&&&&&&&//通过元素Id,唯一性
  22.有这样一个URL:/item.htm?a=1&b=2&c=&d=xxx&e,请写一段JS程序提取URL中的各个GET参数(参数名和参数个数不确定),将其按key-value形式返回到一个json结构中,如{a:'1',&b:'2',&c:'',&d:'xxx',&e:undefined}。
  答案:
1 function serilizeUrl(url) {
var result = {};
url = url.split("?")[1];
var map = url.split("&");
for(var i = 0, len = map. i & i++) {
result[map[i].split("=")[0]] = map[i].split("=")[1];
  23.正则表达式构造函数var reg=new RegExp("xxx")与正则表达字面量var reg=//有什么不同?匹配邮箱的正则表达式?
  答案:当使用RegExp()构造函数的时候,不仅需要转义引号(即\"表示"),并且还需要双反斜杠(即\\表示一个\)。使用正则表达字面量的效率更高。&
  邮箱的正则匹配:
1 var regMail = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((.[a-zA-Z0-9_-]{2,3}){1,2})$/;
&  24.看下面代码,给出输出结果。
1 for(var i=1;i&=3;i++){
setTimeout(function(){
console.log(i);
  答案:4 4 4。
  原因:Javascript事件处理器在线程空闲之前不会运行。那么问题来了,如何让上述代码输出1 2 3?
1 for(var i=1;i&=3;i++){
setTimeout((function(a){
//改成立即执行函数
console.log(a);
  25.写一个function,清除字符串前后的空格。(兼容所有浏览器)
  使用自带接口trim(),考虑兼容性:
1 if (!String.prototype.trim) {
String.prototype.trim = function() {
return this.replace(/^\s+/, "").replace(/\s+$/,"");
7 // test the function
8 var str = " \t\n test string ".trim();
9 alert(str == "test string"); // alerts "true"
  26.Javascript中callee和caller的作用?
  答案:
  caller是返回一个对函数的引用,该函数调用了当前函数;
  callee是返回正在被执行的function函数,也就是所指定的function对象的正文。
  那么问题来了?如果一对兔子每月生一对兔子;一对新生兔,从第二个月起就开始生兔子;假定每对兔子都是一雌一雄,试问一对兔子,第n个月能繁殖成多少对兔子?(使用callee完成)
1 var result=[];
2 function fn(n){
//典型的斐波那契数列
}else if(n==2){
if(result[n]){
return result[n];
//argument.callee()表示fn()
result[n]=arguments.callee(n-1)+arguments.callee(n-2);
return result[n];
  中级Javascript:
  1.实现一个函数clone,可以对JavaScript中的5种主要的数据类型(包括Number、String、Object、Array、Boolean)进行值复制
考察点1:对于基本数据类型和引用数据类型在内存中存放的是值还是指针这一区别是否清楚
考察点2:是否知道如何判断一个变量是什么类型的
考察点3:递归算法的设计
1 // 方法一:
2 Object.prototype.clone = function(){
var o = this.constructor === Array ? [] : {};
for(var e in this){
o[e] = typeof this[e] === "object" ? this[e].clone() : this[e];
10 //方法二:
* 克隆一个对象
* @param Obj
* @returns
function clone(Obj) {
if (Obj instanceof Array) {
//创建一个空的数组
var i = Obj.
while (i--) {
buf[i] = clone(Obj[i]);
}else if (Obj instanceof Object){
//创建一个空对象
for (var k in Obj) {
//为这个对象添加新的属性
buf[k] = clone(Obj[k]);
//普通变量直接赋值
  2.如何消除一个数组里面重复的元素?
1 var arr=[1,2,3,3,4,4,5,5,6,1,9,3,25,4];
function deRepeat(){
var newArr=[];
var obj={};
var index=0;
var l=arr.
for(var i=0;i&l;i++){
if(obj[arr[i]]==undefined)
obj[arr[i]]=1;
newArr[index++]=arr[i];
else if(obj[arr[i]]==1)
return newA
var newArr2=deRepeat(arr);
alert(newArr2); //输出1,2,3,4,5,6,9,25
  3.小贤是一条可爱的小狗(Dog),它的叫声很好听(wow),每次看到主人的时候就会乖乖叫一声(yelp)。从这段描述可以得到以下对象:
1 function Dog() {
this.wow = function() {
alert(&Wow&);
this.yelp = function() {
this.wow();
  小芒和小贤一样,原来也是一条可爱的小狗,可是突然有一天疯了(MadDog),一看到人就会每隔半秒叫一声(wow)地不停叫唤(yelp)。请根据描述,按示例的形式用代码来实。(继承,原型,setInterval)
  答案:
1 function MadDog() {
this.yelp = function() {
var self = this;
setInterval(function() {
self.wow();
9 MadDog.prototype = new Dog();
11 //for test
12 var dog = new Dog();
13 dog.yelp();
14 var madDog = new MadDog();
15 madDog.yelp();
  4.下面这个ul,如何点击每一列的时候alert其index?(闭包)
1 &ul id=&test&&
2 &li&这是第一条&/li&
3 &li&这是第二条&/li&
4 &li&这是第三条&/li&
  答案:
1 // 方法一:
2 var lis=document.getElementById('2223').getElementsByTagName('li');
3 for(var i=0;i&3;i++)
lis[i].index=i;
lis[i].onclick=function(){
alert(this.index);
11 //方法二:
12 var lis=document.getElementById('2223').getElementsByTagName('li');
13 for(var i=0;i&3;i++)
lis[i].index=i;
lis[i].onclick=(function(a){
return function() {
  5.编写一个JavaScript函数,输入指定类型的选择器(仅需支持id,class,tagName三种简单CSS选择器,无需兼容组合选择器)可以返回匹配的DOM节点,需考虑浏览器兼容性和性能。
  /***&@param&selector&{String}&传入的CSS选择器。*&@return&{Array}*/
  答案:(过长,点击打开)
1 var query = function(selector) {
var reg = /^(#)?(\.)?(\w+)$/
var regResult = reg.exec(selector);
var result = [];
//如果是id选择器
if(regResult[1]) {
if(regResult[3]) {
if(typeof document.querySelector === "function") {
result.push(document.querySelector(regResult[3]));
result.push(document.getElementById(regResult[3]));
//如果是class选择器
else if(regResult[2]) {
if(regResult[3]) {
if(typeof document.getElementsByClassName === 'function') {
var doms = document.getElementsByClassName(regResult[3]);
if(doms) {
result = converToArray(doms);
//如果不支持getElementsByClassName函数
var allDoms = document.getElementsByTagName("*") ;
for(var i = 0, len = allDoms. i & i++) {
if(allDoms[i].className.search(new RegExp(regResult[2])) & -1) {
result.push(allDoms[i]);
//如果是标签选择器
else if(regResult[3]) {
var doms = document.getElementsByTagName(regResult[3].toLowerCase());
if(doms) {
result = converToArray(doms);
function converToArray(nodes){
var array = null;
array = Array.prototype.slice.call(nodes,0);//针对非IE浏览器
}catch(ex){
array = new Array();
for( var i = 0 ,len = nodes. i & i++ ) {
array.push(nodes[i])
  6.请评价以下代码并给出改进意见。
1 if(window.addEventListener){
var addListener = function(el,type,listener,useCapture){
el.addEventListener(type,listener,useCapture);
6 else if(document.all){
addListener = function(el,type,listener){
el.attachEvent("on"+type,function(){
listener.apply(el);
  评价:
不应该在if和else语句中声明addListener函数,应该先声明;
不需要使用window.addEventListener或document.all来进行检测浏览器,应该使用能力检测;
由于attachEvent在IE中有this指向问题,所以调用它时需要处理一下
  改进如下:&
1 function addEvent(elem, type, handler){
2   if(elem.addEventListener){
3     elem.addEventListener(type, handler, false);
4   }else if(elem.attachEvent){
5     elem['temp' + type + handler] =
6     elem[type + handler] = function(){
7     elem['temp' + type + handler].apply(elem);
9   elem.attachEvent('on' + type, elem[type + handler]); 
11   elem['on' + type] =
  7.给String对象添加一个方法,传入一个string类型的参数,然后将string的每个字符间价格空格返回,例如:
  addSpace("hello world") // -& 'h e l l o &w o r l d'
String.prototype.spacify = function(){
return this.split('').join(' ');
  接着上述答题,那么问题来了
  1)直接在对象的原型上添加方法是否安全?尤其是在Object对象上。(这个我没能答出?希望知道的说一下。) 
  2)函数声明与函数表达式的区别? 
  答案:在Javscript中,解析器在向执行环境中加载数据时,对函数声明和函数表达式并非是一视同仁的,解析器会率先读取函数声明,并使其在执行任何代码之前可用(可以访问),至于函数表达式,则必须等到解析器执行到它所在的代码行,才会真正被解析执行。(函数声明提升)
  8.定义一个log方法,让它可以代理console.log的方法。
  可行的方法一:
1 function log(msg) {
console.log(msg);
5 log("hello world!") // hello world!
  如果要传入多个参数呢?显然上面的方法不能满足要求,所以更好的方法是:
1 function log(){
console.log.apply(console, arguments);
  那么问题来了,apply和call方法的异同?  
  答案:
  对于apply和call两者在作用上是相同的,即是调用一个对象的一个方法,以另一个对象替换当前对象。将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。
  但两者在参数上有区别的。对于第一个参数意义都一样,但对第二个参数:&apply传入的是一个参数数组,也就是将多个参数组合成为一个数组传入,而call则作为call的参数传入(从第二个参数开始)。&如 func.call(func1,var1,var2,var3)对应的apply写法为:func.apply(func1,[var1,var2,var3]) 。
  9.在Javascript中什么是伪数组?如何将伪数组转化为标准数组?
  答案:
  伪数组(类数组):无法直接调用数组方法或期望length属性有什么特殊的行为,但仍可以对真正数组遍历方法来遍历它们。典型的是函数的argument参数,还有像调用getElementsByTagName,document.childNodes之类的,它们都返回NodeList对象都属于伪数组。可以使用Array.prototype.slice.call(fakeArray)将数组转化为真正的Array对象。
  假设接第八题题干,我们要给每个log方法添加一个"(app)"前缀,比如'hello world!' -&'(app)hello world!'。方法如下:
function log(){
var args = Array.prototype.slice.call(arguments);
//为了使用unshift数组方法,将argument转化为真正的数组
args.unshift('(app)');
console.log.apply(console, args);
  10.对作用域上下文和this的理解,看下列代码:
1 var User = {
getCount: function() {
return this.
9 console.log(User.getCount());
11 var func = User.getC
12 console.log(func());
  问两处console输出什么?为什么?
  答案是1和undefined。
  func是在winodw的上下文中被执行的,所以会访问不到count属性。
  那么问题来了,如何确保Uesr总是能访问到func的上下文,即正确返回1。
  答案:正确的方法是使用Function.prototype.bind。兼容各个浏览器完整代码如下:
1 Function.prototype.bind = Function.prototype.bind || function(context){
var self = this;
return function(){
return self.apply(context, arguments);
9 var func = User.getCount.bind(User);
10 console.log(func());
  11.原生JS的window.onload与Jquery的$(document).ready(function(){})有什么不同?如何用原生JS实现Jq的ready方法?
  window.onload()方法是必须等到页面内包括图片的所有元素加载完毕后才能执行。
  $(document).ready()是DOM结构绘制完毕后就执行,不必等到加载完毕。&  
* 传递函数给whenReady()
* 当文档解析完毕且为操作准备就绪时,函数作为document的方法调用
5 var whenReady = (function() {
//这个函数返回whenReady()函数
var funcs = [];
//当获得事件时,要运行的函数
var ready = false;
//当触发事件处理程序时,切换为true
//当文档就绪时,调用事件处理程序
function handler(e) {
if(ready) return;
//确保事件处理程序只完整运行一次
//如果发生onreadystatechange事件,但其状态不是complete的话,那么文档尚未准备好
if(e.type === 'onreadystatechange' && document.readyState !== 'complete') {
//运行所有注册函数
//注意每次都要计算funcs.length
//以防这些函数的调用可能会导致注册更多的函数
for(var i=0; i&funcs. i++) {
funcs[i].call(document);
//事件处理函数完整执行,切换ready状态, 并移除所有函数
ready = true;
funcs = null;
//为接收到的任何事件注册处理程序
if(document.addEventListener) {
document.addEventListener('DOMContentLoaded', handler, false);
document.addEventListener('readystatechange', handler, false);
window.addEventListener('load', handler, false);
}else if(document.attachEvent) {
document.attachEvent('onreadystatechange', handler);
window.attachEvent('onload', handler);
//返回whenReady()函数
return function whenReady(fn) {
if(ready) { fn.call(document); }
else { funcs.push(fn); }
&  如果上述代码十分难懂,下面这个简化版:
1 function ready(fn){
if(document.addEventListener) {
//标准浏览器
document.addEventListener('DOMContentLoaded', function() {
//注销事件, 避免反复触发
document.removeEventListener('DOMContentLoaded',arguments.callee, false);
//执行函数
}, false);
}else if(document.attachEvent) {
document.attachEvent('onreadystatechange', function() {
if(document.readyState == 'complete') {
document.detachEvent('onreadystatechange', arguments.callee);
//函数执行
  12.(设计题)想实现一个对页面某个节点的拖曳?如何做?(使用原生JS)
  回答出概念即可,下面是几个要点
给需要拖拽的节点绑定mousedown,&mousemove,&mouseup事件
mousedown事件触发后,开始拖拽
mousemove时,需要通过event.clientX和clientY获取拖拽位置,并实时更新位置
mouseup时,拖拽结束
需要注意浏览器边界的情况
1 function setcookie(name,value,days){
//给cookie增加一个时间变量
2   var exp = new Date();
3   exp.setTime(exp.getTime() + days*24*60*60*1000); //设置过期时间为days天
4   document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString();
6 function getCookie(name){
7   var result = "";
8   var myCookie = ""+document.cookie+";";
9   var searchName = "+name+"=";
10   var startOfCookie = myCookie.indexOf(searchName);
11   var endOfC
12   if(satrtOfCookie != -1){
13     startOfcookie += searchName.
14     endOfCookie = myCookie.indexOf(";",startOfCookie);
15     result = (myCookie.substring(startOfCookie,endOfCookie));
19 (function(){
20   var oTips = document.getElementById('tips');//假设tips的id为tips
21   var page = {
22   check: function(){//检查tips的cookie是否存在并且允许显示
23     var tips = getCookie('tips');
24     if(!tips || tips == 'show')//tips的cookie不存在
25     if(tips == "never_show_again")
27   hideTip: function(bNever){
28     if(bNever) setcookie('tips', 'never_show_again', 365);
29     oTips.style.display = "none";//隐藏
31   showTip: function(){
32   oTips.style.display = "inline";//显示,假设tips为行级元素
34   init: function(){
35     var _this =
36     if(this.check()){
37     _this.showTip();
38     setcookie('tips', 'show', 1);
40   oTips.onclick = function(){
41     _this.hideTip(true);
page.init();
  14.说出以下函数的作用是?空白区域应该填写什么?
1 //define
2 (function(window){
function fn(str){
fn.prototype.format = function(){
var arg = ______;
return this.str.replace(_____,function(a,b){
return arg[b]||"";
window.fn =
14 })(window);
17 (function(){
var t = new fn('&p&&a href="javascript:void(0);"&{1}&/a&&span&{2}&/span&&/p&');
console.log(t.format('','Alibaba','Welcome'));
  答案:访函数的作用是使用format函数将函数的参数替换掉{0}这样的内容,返回一个格式化后的结果:
  第一个空是:arguments
  第二个空是:/\{(\d+)\}/ig
  15.用面向对象的Javascript来介绍一下自己。(没答案哦亲,自己试试吧)
  答案: 对象或者Json都是不错的选择哦。
  16.讲解原生Js实现ajax的原理。
  Ajax&的全称是Asynchronous JavaScript and XML,其中,Asynchronous&是异步的意思,它有别于传统web开发中采用的同步的方式。
  Ajax的原理简单来说通过XmlHttpRequest对象来向服务器发异步请求,从服务器获得数据,然后用javascript来操作DOM而更新页面。
  XMLHttpRequest是ajax的核心机制,它是在IE5中首先引入的,是一种支持异步请求的技术。简单的说,也就是javascript可以及时向服务器提出请求和处理响应,而不阻塞用户。达到无刷新的效果。
  XMLHttpRequest这个对象的属性有:
&onreadystatechang & &每次状态改变所触发事件的事件处理程序。
&responseText & &从服务器进程返回数据的字符串形式。
&responseXML & &从服务器进程返回的DOM兼容的文档数据对象。
&status & &从服务器返回的数字代码,比如常见的404(未找到)和200(已就绪)
&status Text & &伴随状态码的字符串信息
&readyState & &对象状态值
&0 (未初始化)&对象已建立,但是尚未初始化(尚未调用open方法)
&1 (初始化)&对象已建立,尚未调用send方法
&2 (发送数据) send方法已调用,但是当前的状态及http头未知
&3 (数据传送中)&已接收部分数据,因为响应及http头不全,这时通过responseBody和responseText获取部分数据会出现错误,
&4 (完成)&数据接收完毕,此时可以通过通过responseXml和responseText获取完整的回应数据
  下面简单封装一个函数:(略长,点击打开)  
url: "./TestXHR.aspx",
//请求地址
type: "POST",
//请求方式
data: { name: "super", age: 20 },
//请求参数
dataType: "json",
success: function (response, xml) {
// 此处放成功后执行的代码
fail: function (status) {
// 此处放失败后执行的代码
function ajax(options) {
options = options || {};
options.type = (options.type || "GET").toUpperCase();
options.dataType = options.dataType || "json";
var params = formatParams(options.data);
//创建 - 非IE6 - 第一步
if (window.XMLHttpRequest) {
var xhr = new XMLHttpRequest();
} else { //IE6及其以下版本浏览器
var xhr = new ActiveXObject('Microsoft.XMLHTTP');
//接收 - 第三步
xhr.onreadystatechange = function () {
if (xhr.readyState == 4) {
var status = xhr.
if (status &= 200 && status & 300) {
options.success && options.success(xhr.responseText, xhr.responseXML);
options.fail && options.fail(status);
//连接 和 发送 - 第二步
if (options.type == "GET") {
xhr.open("GET", options.url + "?" + params, true);
xhr.send(null);
} else if (options.type == "POST") {
xhr.open("POST", options.url, true);
//设置表单提交时的内容类型
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.send(params);
//格式化参数
function formatParams(data) {
var arr = [];
for (var name in data) {
arr.push(encodeURIComponent(name) + "=" + encodeURIComponent(data[name]));
arr.push(("v=" + Math.random()).replace("."));
return arr.join("&");
  上述代码大致表述了ajax的过程,释义自行google,问题未完,那么知道什么是Jsonp和pjax吗?
  答案:
  Jsonp:(JSON with Padding)是一种跨域请求方式。主要原理是利用了script 标签可以跨域请求的特点,由其 src 属性发送请求到服务器,服务器返回 js 代码,网页端接受响应,然后就直接执行了,这和通过 script 标签引用外部文件的原理是一样的。JSONP由两部分组成:回调函数和数据,回调函数一般是由网页端控制,作为参数发往服务器端,服务器端把该函数和数据拼成字符串返回。
  pjax:pjax是一种基于ajax+history.pushState的新技术,该技术可以无刷新改变页面的内容,并且可以改变页面的URL。(关键点:可以实现ajax无法实现的后退功能)pjax是ajax+pushState的封装,同时支持本地存储、动画等多种功能。目前支持jquery、qwrap、kissy等多种版本。
  觉得题目还ok的亲点个推荐哦,题量会不断增加。
  你可能会感兴趣:
  暂且贴出我做出答案的部分。有时间把未做出答案也贴出来。针对文中各题,如有更好的解决方法或者错误之处,各位亲务必告知我,误人子弟实乃罪过。
阅读(...) 评论()

我要回帖

更多关于 日租房去哪个网站 的文章

 

随机推荐