一些前端开发注意的细节

1.如何对CSS和Js进行优化
CSS
1.代码去重
2.压缩代码量(很多在线工具)
3.雪碧图压缩
4.CSS文件合并

js
尽可能少声明变量
尽量减少闭包的使用
尽量少使用for in 循环
尽可能少使用dom操作 ->用变量
减少代码重用
代码压缩、文件合并

2.js的typeof返回哪些数据类型?
Function String Number Boolean undefined
Object Symbol

Symbol是ES6新引入的一种数据类型,表示独一无二的值
可以作为属性,可以作为属性在任何对象中,不重复

3.事件绑定和普通事件有什么区别?
事件绑定是可以叠加的
事件只能回收 不精准
事件绑定能精准接触哪个函数

4.兼容浏览器的写法
-webkit- 针对safari,chrome浏览器的内核CSS写法
-moz-针对firefox浏览器的内核CSS写法
-ms-针对ie内核的CSS写法
-o-针对Opera内核的CSS写法

window.navigator.userAgent //检查是哪个浏览器
比如

let  ua = window.navigator.userAgent;
if(ua.lastIndexof('Chrome')!=-1){ // 等于-1就是没找到
  div1.style.background = 'red';
}

5.ajax请求时,如何解析json数据?
eval
JSON.parse
JSON.stringify

11.ajax请求的时候get和post方式的区别
请求和发送数据的
get 内容都在地址栏里 不安全 大小只有32K
post 内容加密 安全 最高2G

12.三目运算符

var val ="goudan";
console.log("val is" + (val === "goudan")? "goudan":"other");

这道题实际上拆分成这样

if("val is" + (val === "goudan")){
      console.log("goudan");
}else{
      console.log("other");
}

?前面都是判断体

13.报错问题
报错也分两种 一种是编译性错误 一种是语法错误(即使前面正确有结果也不会显示)

14.数学方法
Math.floor()向下取整
Math.ceil()向上取整

15.call apply bind
都可以改变this的指向
call 和 apply都是可以把函数直接调用
call ->从第二个参数开始就是指的调用函数的形参
apply ->第二个参数开始就是数组

16.闭包是什么,有什么特性,对页面有什么影响
1.子函数使用父函数变量的行为
2.子函数可以延长父函数变量的生命周期
3.可以拓展函数的空间

17.ajax可以跨域么?
ajax不可以跨域,跨域这事后台做决定

18.如何阻止事件冒泡?
stopPropagation();
cancelBubble = true;

17.如何查找节点?添加节点?删除节点?

//查找
document.getElementById()
 getElementsByTagName()
getElementsByClassName()
getElementsByName();
querySelector();
querySelectorAll();
children;
parentNode;
firstChild();
lastChild();
nextChild();

//插入
appendChild();
insertBefore();
insertAdjacentElement();
beforeBegin() /放到前面
afterBegin() / 放到后面
beforeEnd 
afterEnd

//删除
innerHTML
outerHTML
removeChild()
remove()

18.数组去重

var arr = [1,2,3,4,4,3,2,5]
function removeDb(arr){
          var arr2 = [];
          for(var i = 0;i

19.编写一个方法查询里面有几个字母

var str ='aabbbcccccc'
String.prototype.returnText=function(){
    var json = {};
    for(var i = 0;i

20.添加一个东西使其输出hello world

if((function(){
    console.log('hello world');
    consoloe.log=function(){}
})){
    console.log('hello')
}else{
    console.log('world');
};

21.cookie,sessinStorage,localeStorage的区别
cookie 是临时储存 4kb
cookie 有时间限制

后者都是 5mb的储存空间,没有时间限制
sessinStorage 关上浏览器就消失了 不通用 第二个页面就调用不了

22.(function(a){
// var a
//var a=100
//var a =function(){}
console.log(a);
var a=10;
function a(){};
}(100));

所以最后输出的是 function a(){}

for(var i =0;i<3;i++){
setTimeout(function(){
console.log(i++)
},0)
}
循环完的时候i是3, 然后再执行3次i++ 所以就是 3 4 5

var z=10;
function foo(){
      console.log(z);
}

(function(funArg){
        var z =20;
        funArg();
})(foo)

//输出10,因为始终没有改变foo函数的指向
// var a;
// var a = function(){}
console.log(typeof a );
var a = 10;
function a(){console.log(1)};

var a = 10;
function b(){
// var a 这里的a把外面的覆盖了
console.log(a);
var a = 20
}
b() // undefined

27.数组的方法
如何判断对象是属于什么的
constructor.name
直接输入Array.prototype就能知道所有方法

28.什么叫对象
1.new出来的都是对象
2.对象都不相等
3.对象都有私有属性
4.对象都有引用机制

29.水平垂直居中的方式
1.绝对定位
2.固定定位(top:0,bottom:0,left:0,right:0,margin:auto)
3.flex布局

30.不用循环,往数组里添加1~100的元素

var arr=[];
var i = 0;
var t = setInterval(()=>{
        arr.push(i);
        i++;
        if(i==100){
          clearInterval(t);
        }
})

第二种方法

var arr=[],i=0;
function add(){
    arr.push(i);
    i++;
    if(i ==100){
        return;
    }
    add();
}

你可能感兴趣的:(一些前端开发注意的细节)