前端基础二

1、使用 typeof bar === "object" 判断 bar 是不是一个对象有神马潜在的弊端?如何避免这种弊端?
使用 typeof 的弊端是显而易见的(这种弊端同使用 instanceof):
let obj = {};
let arr = [];
console.log(typeof obj === 'object'); //true
console.log(typeof arr === 'object'); //true
console.log(typeof null === 'object'); //true
从上面的输出结果可知,typeof bar === "object" 并不能准确判断 bar 就是一个 Object。可以通过 Object.prototype.toString.call(bar) === "[object Object]" 来避免这种弊端:
let obj = {};
let arr = [];
console.log(Object.prototype.toString.call(obj)); //[object Object]
console.log(Object.prototype.toString.call(arr)); //[object Array]
console.log(Object.prototype.toString.call(null)); //[object Null]
2、下面的代码会在 console 输出神马?为什么?
(function(){
var a = b = 3;
})();
console.log("a defined? " + (typeof a !== 'undefined'));
console.log("b defined? " + (typeof b !== 'undefined'));

这跟变量作用域有关,输出换成下面的:
console.log(b); //3
console,log(typeof a); //undefined

拆解一下自执行函数中的变量赋值:

b = 3;
var a = b;

所以 b 成了全局变量,而 a 是自执行函数的一个局部变量。


3.
var myObject = {
foo: "bar",
func: function() {
var self = this;
console.log("outer func: this.foo = " + this.foo);  // "bar",
console.log("outer func: self.foo = " + self.foo); // "bar",
(function() {
console.log("inner func: this.foo = " + this.foo); // undefined
console.log("inner func: self.foo = " + self.foo); // "bar",
}());
}
};
myObject.func();

可以改写成这样
(function(test) {
console.log("inner func: this.foo = " + test.foo); //'bar'
console.log("inner func: self.foo = " + self.foo);
}(self));

 
 +++++++++ 实现垂直居中的方法
1.margin: 0 auto  //水平居中
position:relative
top:50  // 明显偏下
transform:translateY('-50%') // 基于自身往上偏移一一半

transform的属性包括:  // 使什么变形
rotate() /  旋转
skew() / 倾斜
scale() / 缩小变大 
 translate(,) / 使什么翻译  translateY(-50%) 向上偏移50%
分别还有x、y之分,比如:rotatex() 和 rotatey() 


2.
在父级元素写的属性--- 子元素会居中
display:flex
aligin-items:center     //垂直居中 aligin垂直
justify-content:center  //水平居中
 
==========字符串 15889853286 去重8
1.'15889853286'.split('8').join('')
2.for循环
for(var i =0 ;i<len;i++){
 var new='' 
 if(val[i] !=='8'){
  new+ = var[i]
 }
 return newstring 
}
3.完全去重
for(var i =0 ; i<len ;i++){
 var  newarr =[]
 if(newarr [i].indexOf(new)<0){
 (arr.splice(0,i)
  newarr.push(arr[i])
 })
 return  newarr

==========数组去重复

===========http 302  304  101 表示什么
302重定向  服务器要求再发送一个请求, 服务器返回一个location指向新请求的url地址
304缓存页面 ,通过对比修改时间 发送304响应 , 如果时间相同就显示浏览器自己的缓存页面,如果修改就返回200


==========================Session cookie的区别  session关闭了浏览器就不会有了 
1.session 存在服务器  cookie存在客户浏览器 
2.session能存比较大  cookie 比较小只能存4K最多保存20个cookie
3.安全信息存在session  cookie可以模拟不是很安全

====================
XML sql注入
  input 怎么预防  script 标签转化成其他的输入符

1.把script之类的标签要替换掉
2.一些类似 尖角的标签替换掉< >   或者用其他转码什么的 

===============
Objective .propty.tostring.call(a)判断类型
判断类型有多少种方法
1.typeOf [] = object   typeOf object = object  typeOf null = object  
2.instanceOf() 判断他一个原型链上面的属性 是不是继承
3.Object.propty.toString.call()

============
vue next()的用法 跳登录页面
 beforeRouteLeave (to, from, next) {
        console.log('离开路路由')
       if(to.fullPath==='/home'){
         next();
       }else{
         next('/home')
       }
=============函数怎么设置默认值
function(a=1,b=2,c=3)


==============组件异
路由组件异步
要用的时候才装入需要的组件,有效提高首次装入页面的速度,路由切换的时候也可以用到
const Singer = (resolve) => {
  import('components/singer/singer').then((module) => {
    resolve(module)
  })
}
 
==========... 的用法
es6 扩展运算符  是一个扩展应用符
1输出单个数字....[1,2,3] 输出 1 2 3
2.在函数中使用  
var arr1 = [x,y,z]
function(...arr1)  等同于 function(x,y,z)
3.可以拼接数组
var arr1 = [x,y,z]
var arr2 = [1,2]
[arrr,...arr2] 
4.取数组的最大值
var arr1 = [1,2,3,4]
Math.max(..arr1)   // 输出4

======== vue ref 
组件使用 的时候 ,在组件引用ref 指向的是一个实例  ,  只当前标签使用ref的是dom

=======================
this.$nextTick( 的用法

============深复制和浅复制的区别和用法
浅复制: 浅复制数据不能被shopcart的数据监听主要是复制了一个引用类型,并没有重新开一个新的内存 ,还是指向原有内存
Object.assign({},{a:1})
 
深复制: 使用往上一层一层递归复制, 重新开了一个新的内存空间,指向新的内存

for(i in object){

}
 
====================为什么只能用mutation改变vuex状态
官方文档写的是准确追踪这个状态的变化 ,在大型项目中vuex的状态可以被更好控制

==============
Keep alive的用法
vue2.0提供了一个keep-alive组件
用来缓存组件,避免多次加载相应的组件,减少性能消耗 
<keep-alive><router-view></router-view></keep-alive>

======================如何理解Vue组件中所说的is特性 
因为在 html 标签里面是不可以 使用compment的 所以只能用is标签??

========================怎么解决Ui框架渲染卡顿问题 ,比如我一个地方省份选择器,点击弹起的时候十分卡顿

==============
印象最深刻的问题有哪些??

========
判断自身对象的来源是本身还是来自原型链的
instans of 

======浏览器怪异模式是什么
怪异模式跟标准模式,标准模式就是根据完w3c标准 
怪异浏览器
1.盒子模型, 宽高包括了border,padding
2.图片垂直对齐方式,会导致底部会有间隙  
3.table标签内的字体大小不会继承父元素的属性

====浮动的原理 ,如何清除浮动
原理:浮动的框可以左右移动,不会影响块级元素的布局,只会影响内联元素的排列一边是文本之类. 如果浮动的元素高于他里面的框元素 就会有这种特性就会有高度坍塌的现象, 其他元素高度为0 
如何清除:
1.直接写clear:both; . 
2.。通过在浮动元素的末尾添加一个空元素,设置 clear:both属性,after伪元素其实也是通过 content 在元素的后面生成了内容为一个点的块级元素
.clearfix:after {content:"."; display:block; height:0; visibility:hidden; clear:both; }   
.clearfix { *zoom:1; } //为了适配ie6 
在后面加一个伪类,通过content继承一个块级元素

====js实现冒泡排序
将8,4,3,1,4,6,等数字按照从小到大的顺序依次输出;
var arr = [8,4,1,4,6]
var tmp = null ; //作为中间存值 
for(var i =0 ;i<arr.length;i++){
for(var j = i+1;i<arr.length;i++){
     if( arr[i] > arr[j] ){   //前一个大于后一个
    tmp = arr[i]  // 把当前的值放到 tmp 
    arr[j]  =  arr [ i ]  // 把比较大的那个值放到数组的后一位 
    arr[ i ] = tmp   // 把比较小的放到 数组的 前一位 
}
}

===========================  for in 
var  arr  = [1,2,3 ]
var obj = {x:1,y:2}
for(x in arr ){
    console. log(x)   // 数组输出下标 
   console.log(arr【x】) // 输出1,2,3

for(x in obj){
console.log(x)  // 输出 X ,Y
cosole.log(obj【x】) //输出 1,2

======写一段js 函数 每调用一次就加1  用ES6写
const i = 0
setTime(()=>{
 console.log( i + 1) 
},1000) 

PS: 由于整理得不是很好 而且是由自己的话语组织语言.所以不确保完全正确仅供参考.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值