1、想要准确判断一个变量是不是数组类型,不能使用typeof arr,因为返回结果是object,应该使用arr instanceof Array,根据返回结果是true还是false进行判断。
2、使用reduce处理数组的时候,因为每次迭代的时候都需要使用上一次计算的结果,所以一定记得将每次计算的结果进行return,否则计算是无效的
3.js中return false的意思是函数终止并返回false,意思就是return false以后的代码都不会执行,如果声明变量接收返回值,那变量就是false;return true的意思是函数终止并返回true,意思就是return true以后的代码都不会执行,如果声明变量接收返回值,那变量就是true
4、JavaScript中return与return false区别:return 的返回的是undefined,而 return false 返回的就是false,多数情况下两者的效果是一样的,因为undefined等价于false,但如果软件要求严格检测返回值的类别(比如要求必须是布尔值true和false),那就不能混用了
5、js中Math.max用法Math.max(value1,value2),然后返回其中的最大值,当然了,比较的个数没有限制,这里只写两个
6、word-wrap与word-break的区别,以及无效情况:
(1)word-break:break-all 例如div宽400px,它的内容就会到400px自动换行,如果该行末端有个英文单词很长(congratulation等),它会把单词截断,变成该行末端为conra(congratulation的前端部分),下一行为tulation(conguatulation)的后端部分了。
(2)word-wrap:break-word 例子与上面一样,但区别就是它会把congratulation整个单词看成一个整体,如果该行末端宽度不够显示整个单词,它会自动把整个单词放到下一行,而不会把单词截断掉的。还有就是如果单词太长的话也会进行分割。
我遇到一个情况,就是我设置了:
word-break:break-all 或者word-wrap:break-word都无效,字符串不会自动换行。
经过查证,发现原因会有两个:1、word-wrap对行内元素是没有效果的;2、一般情况下,元素拥有默认的white-space:normal(自动换行,不换行是white-space:nowrap),可能是元素中设置的white-space是norwrap导致,无法换行。所以需要white-space:normal;word-break:break-all;这样问题就解决了。white-space 对程序中的空白进行处理,默认是normal (浏览器会对空白进行忽略);(3)对table 的td 标签下的元素设置word-wrap:word-break是没有效果的。
7、slice和splice区别:
const arr=[1,2,3,4,5,6,7];
const result=arr.slice(2,4);
console.log(arr);//[1,2,3,4,5,6,7]
console.log(result);//[3, 4]
const arr2=[7,6,5,4,3,2,1];
const result2=arr2.splice(2,4,100,200,300);
console.log(result2);//[5, 4, 3, 2]
console.log(arr2)//[7, 6, 100, 200, 300, 1]
slice表示截取,slice(start,end)不改变原数组,返回新数组。
splice表示删除,splice(start,length,item),会改变原数组,从某个位置开始删除多个元素,并可以插入新的元素。
8、设计图片作为背景铺满屏幕:
body{
background-image: url(../img/map.png);
background-position: center center;
background-size: cover;
background-attachment: fixed;
}
9、如何解决npm下载慢的问题:
(1)使用cnpm:使用阿里定制的 cnpm 命令行工具代替默认的 npm,输入下面代码进行安装:$ npm install -g cnpm --registry=https://registry.npm.taobao.org以后安装插件只需要使用cnpm intall即可。
(2)仍然使用npm,只进行换源:输入以下命令:npm config set registry https://registry.npm.taobao.org 再输入:npm config list可以看到,已经换源了
10、elementUI中el-scrollbar的使用:
前端UI界面设计的时候经常会出现滚动条,但是浏览器默认的滚动条一般比较难看,不推荐使用。elementUI中有一个隐藏的组件el-scrollbar,在官方的教程中并没有出现,但是在实际使用中比较不错,这里记录一下使用方法以及使用中遇到的坑。
(1)使用方法:将会出现滚动条的部分直接放进组件el-scrollbar即可,然后将标签的height属性设置为100%即可。
(2)注意事项:设置完之后查看效果会发现出现一个横向的滚动条,此时需要添加以下css样式即可,但是一定要注意不要在scoped私有变量中进行添加,而是应该在app.vue 或者公共的css中进行添加,否则是没有效果的。
.el-scrollbar__wrap{
overflow-x: hidden;
}
11、angular中渲染对象数组:ng-repeat="value in item track by $index"
12、获取表单 select域的选择部分的文本
//HTML部分
//js部分
const obj = document.getElementById('obj');
const result = obj.options[obj.selectedIndex].text;
console.log(result);
13、加号优先级高于 三目运算。低于括号。所以以下代码输出define
//假设val已经声明,可定义为任何值
console.log('Value is ' + (val != '0') ? 'define' : 'undefine');
14、append() 和appendTo()方法在被选元素的结尾(仍然在内部)插入指定内容
15、通过原生的js如何禁用id为 button1的按钮button:
//方法1
document.getElementById("button1").disabled = true;
//方法2
document.getElementById("button1").setAttribute(“disabled”,”true”);
16、给网页添加javascript的方式有:
1)使用script标签,将javascript代码写到之间
2)添加外部javascript文件
3)使用行内javascript
4)使用@import引入javascript文件(错误选项)
17、判断obj对象是否具有val属性:
var obj={}
……
obj.hasOwnProperty("val")
18、准备XMLHttpRequest对象时,在send()前需要调用open ()方法
19、angularjs1中服务的正确写法是:ng-service
20、typeof Date.now() 的值是number,原因:Date.now() 方法返回自1970年1月1日 00:00:00 UTC到当前时间的毫秒数
21、如何规避javascript多人开发函数重名问题
1)可以通过命名规范,比如根据不同的开发人员实现的功能,在函数名加前缀
2)每个开发人员都把自己的函数封装到类中,然后调用的时候即使函数名相同,但是因为是要类.函数名来调用,所以也减少了重复的可能性
22、Javascript内置的可迭代对象:Array、Map、String,注意Object不是
23、在JavaScript中 false,undefined,null,空字符串,数字0 ,数字NaN被当做假值
24、== 和 ===的区别是,==会将两边的值进行隐式类型转换,而 ===不会。undefined和null转换为Boolean类型后都为false,如果使用==会进行转换,那么undefined和null相等啦,如果使用===不会进行转换,那么undefined和null不相等
25、浏览器端的JavaScript包含ECMAScript,DOM对象以及BOM对象
26、JavaScript是一种动态类型,弱类型,基于原型,直译式的脚本语言。
27、JavaScript语言不仅可以在浏览器环境运行,也可以在node提供的服务器端的平台运行
28、 var a=[]; a[0]=1; a[1]=2; a[2]=3; a[5]=4; 请问 a.length 的值是6
29、关于函数的几种说法:
1)函数声明语法定义:function sum(num1,num2){return num1+num2}
2)函数表达式定义函数:1.var sum = function(num1,num2){return num1+num2};
3)var sum = new Function("num1","num2","return num1+num2");Function构造函数可以接受任意数量的参数,但最后一个参数始终被看成函数体,注意函数表达式定义函数的方法与声明其他变量时一样需要加分号。
//函数声明
function sum(a,b){
return a+b
}
//函数表达式
var sum = function(a,b){
return a+b
}
30、数据类型转换
1)没有内容就是undefined,这个就是false
2)0就是false,1是true
3)null跟undefined一样,都是false
4)字符串里面有内容的话才是true,没有内容就是false
5)NaN是一种数值类型,已经是false了,只是为了让程序继续往下面走
其他解析: 数值只要不是0,都是true 对象object永远都是true
31、如果需要匹配包含文本的元素,应该使用contains()方法
32、ES5中,forEach(), filter(), reduce(), every() 和some()都会跳过空位,map()也会跳过空位,但会保留这个值,join()和toString()会将空位视为undefined,而undefined和null会被处理成空字符串,ES6 中都会将空位当做undefined
33、全局定义的函数和变量都是挂载到window对象上面的,比如undefined是window的一个全局变量,所以undefined in window 的返回值是true
34、判断对象是否具有某个属性或者是数组是否具有某个索引值可以使用in操作符,但是需要注意的是查看属性必须是字符串类型的,查看索引是数值类型
35、如果不给cookie设置过期时间,在浏览器会话结束时过期。
36、在 javascript 中,用于阻止默认事件的默认操作的方法是preventDefault()
37、stopPropagation() 阻止事件冒泡。 这个事件不会阻止定义在元素上的其他事件。
38、stopImmediatePropagation() 会彻底的阻止事件, 在其之后的绑定在元素上的其他监听事件都不会触发
39、preventDefault() 阻止事件的默认动作
40、Number(null)返回0
41、IIFE(立即执行函数表达式)中的this指向window
42、NOSCRIPT标签是用来定义在脚本未被执行时的替代内容,例如
...
...
...
...
43、angularjs1中使用指令,绑定监听是在link时。
44、'.'表示是当前目录,'..'表示是上级目录,'./'和'../'分别对应于当前目录和上级目录。
45、移动端开发过程中尽量避免使用浮动来进行页面布局,建议多采用flex布局,否则会发生各种未知的问题。