1、javascript如何判断⼀个对象是否为数组?
Array.isArray();
2、说说javascript的⼏条基本规范?
不要在同⼀⾏声明多个变量;
使⽤===/!==来⽐较true/false或者数值;
使⽤对象字⾯量代替 new Array这种形式;
不要使⽤全局函数;
Switch语句必须带有default分⽀;
if语句必须使⽤⼤括号;
for-in 循环中的变量应该使⽤ var关键字明确限定作⽤域,从⽽避免作⽤域污染。
3、CSS实现三列布局(左右固定宽度,中间自适应)
(1)CSS浮动
第一个float:left,第二个float:right,第三个设置margin-left和margin-right
(2)绝对定位法
第一个定位到left,第二个定位到right,第三个设置margin-left和margin-right
(3)flex布局
4、继承有哪些方法
原型链继承
借用构造函数继承(伪造对象、经典继承)
实例继承(原型式继承)
组合式继承
寄生组合继承
es6继承 extends
5、null 和 undefined 的区别?
相同:
在 if 语句中 null 和 undefined 都会转为false两者用相等运算符比较也是相等
首先 Undefined 和 Null 都是基本数据类型,这两个基本数据类型分别都只有一个值,就是 undefined 和 null。
不同:
undefined 代表的含义是未定义,
定义了形参,没有传实参,显示undefined
一般变量声明了但还没有定义的时候会返回 undefined
对象属性名不存在时,显示undefined
函数没有写返回值,即没有写return,拿到的是undefined
null 代表的含义是空对象。也作为对象原型链的终点
null 主要用于赋值给一些可能会返回对象的变量,作为初始化。
6、数组的常用API
push()向数组的末尾添加一个元素
unshift()向数组的第一位添加一个元素
pop()删除数组的最后一个元素
shift()删除数组的第一位元素
join()用于将数组里的对象放入一个字符串并且用指定分隔符相连
splice()用于在数组的指定index处添加或者删除指定数量的元素
7、get和post的区别
由于GET请求的参数都是在url地址栏可以直接看到因此GET相对POST请求来说安全性低
GET请求回退是无害的而POST请求回退时会重新请求
GET请求只支持URL编码格式,而POST请求是支持多种编码格式
GET请求会被浏览器的历史记录默认保存而POST请求除非手动设置是不会被浏览器所缓存的
GET请求的参数是放在URL地址栏里而POST请求是request.body中
GET请求是有长度限制的(长度限制取决于浏览器的规定),而POST请求没有限制
8、列举不同的清除浮动的技巧,并指出它们各自适用的使用场景。
1.使用空标签清除浮动。这种方法是在所有浮动标签后面添加一个空标签定义css clear:both.弊端就是增加了无意义标签。
2.使用overflow。给包含浮动元素的父标签添加css属性overflow:auto;zoom:1;zoom:1用于兼容IE6。
3.使用after伪对象清除浮动。该方法只适用于非IE浏览器。具体写法可参照以下示例。使用中需注意以下几点。一、该方法中必须为需要清除浮动元素的伪对象中设置height:0,否则该元素会比实际高出若干像素;二、content属性是必须的,但其值可以为空,content属性的值设为”.”,空亦是可以的。
4.浮动外部元素
此三种方法各有利弊,使用时应择优选择,比较之下第二种方法更为可取。
9、你对作用域的认识有多少?
作用域通俗地讲,就是指一个变量的作用范围。下面分别介绍下全局作用域和函数作用域的概念。
全局作用域
页面打开时被创建,页面关闭时被销毁。
编写在 script 标签下的变量和函数,作用域为全局,页面的任意位置都可以访问
有全局对象 window ,代表浏览器窗口,全局作用下的变量和函数作为 window 的属性和方法
函数作用域(局部)
函数是被调用时创建的,执行完毕之后销毁。
函数每调用一次,变量和函数就会重新创建一次,它们之间是相互独立的
在函数作用域内可以访问到全局变量或函数,但是在函数外无法访问函数作用域内的变量
函数作用域内访问变量,会在自身作用域内寻找,若没有则会向上一级作用域内查找,一直到全局作用域。
10、new的实现原理是什么?
创建一个空对象,构造函数中的this指向这个空对象
这个新对象被执行 [[原型]] 连接
执行构造函数方法,属性和方法被添加到this引用的对象中
如果构造函数中没有返回其它对象,那么返回this,即创建的这个的新对象,否则,返回构造函数中返回的对象。