基础知识

315 阅读7分钟

import和@import和require三者关系

1.@import是用于引入css文件并且只能写在css区域内,import用于可以引入css也可以引入js文件并且只能写在js区域内(例:import Vue from 'vue'或import 'utils/backend'或import 'element-ui/index.css'),require可以引入css,写在j s区域内(例:require('assets/css/index.css')),也可以写在css内(待验证),也可以引入js(例:var model=require('...'))。 2.@import '...'等同于@import url('...'),import 'utils/backend'表示仅仅执行这个模块的代码,import Vue from 'vue'表示vue模块作为Vue来引入,import {mapGetters} from 'vue'表示vue中mapGetters这个方法作为mapGetters这个名称引入,import {lastName as surName} from 'Vuex'表示Vuex中lastName这个方法作为lastName重命名为surName这个名称引入。 3.import是es6写法,require是es5写法,编译的时候import最终会编译成require来执行,import在编译时调用,所以必须放在文件开头,require是运行时调用所以理论上是可以写在任何地方,前者的性能会好一些。

return、break、continue区别

(1)使用场景:return一般在方法中使用(也可以在循环体中使用),break只能在switch,for等循环体中使用,continue只用在for,white,do-white循环体中,常跟if语句一起使用,总而言之return一般在方法中使用,break和continue只能在循环体中使用。

(2)作用:return作用:1.结束当前的函数体,返回当前调用方法的节点继续执行2.返回一个值给调用这个方法的语句。

break作用:使一个循环立刻结束,不会执行这个循环体后面的语句,但是会跳出这个循环体执行后面的语句。

continue作用:跳过本次循环,而不是中止整个循环,break是中止整个循环

(3)break和continue区别:

1.break可以用于switch语句,continue不可以用于switch语句。

2.他们都是只能用于循环体,但是continue只是跳过本次循环,break是中止整个循环

例:

for (let i = 0;i< 5;i++) {

if (i===3) break

console.log(i)

}

// i的值为0,1,2,3

for (let i = 0;i< 5;i++) {

if (i===3) continue

console.log(i)

}

// i的值为0, 1,2,4

总结:

return是结束当前的函数体,返回调用当前方法的节点。

break是中止整个循环,继续执行循环体下面的语句

continue是跳过本次循环,继续执行其他循环

addEventListener和on的共同点和区别

addEventListener和on共同点

1.它们都是给dom节点添加监听事件。例:

document.getElementByClassName('echart').addEventListener('mouseover',
this.EventMouse)或者document.getElementByClassName('echart').onmouseover
= this.EventMouse这两种方法都是给echart节点添加一个鼠标移入事件

注意:前者mouseover不是onmouseover,如果是后者则没有效果,后者是onmouseover而不是mouseover

不同点

(1)前者允许对一个dom添加多个监听器,而且都会被触发,后台可以对一个dom添加多个点击事件但是后者会覆盖前者

(2)前者提供了一种更精细的手段控制事件监听器的触发阶段。(比如捕获或冒泡),后者只在冒泡阶段触发。 例如:element.addEventListener(event, function, useCapture)

event:(必需)事件名,支持所有dom事件

function:(必需)指定要事件触发时执行的函数

useCapture:(可选)指定事件是否在捕获或冒泡阶段执行。true,捕获,false,冒泡,默认false

(3)前者对任何dom元素都是有效的,后者仅仅对html元素有效。

(4)前者可以解除事件绑定,后者无法解除事件绑定

js点击事件的三种方式

在js中可以为某个元素指定事件,指定的方式有以下三种

1.在html中使用onclick属性

2.在js中使用onclick属性

3.在js使用addEventListener方法

三种方法的比较

(1)在第一种方法中,onclick大小写都可以,但在第二种方法中,必须使用小写。因为html对大小写不敏感,而js则会区分大小写。

(2)第一种方法需要括号,第二、第三种不需要,例如:

onclick="clickHandle()"
document.getElementByClassName('btn').onclick = clickHandle
document.getElementByClassName('btn').addEventListener('click', clickHandle)
addEventListener相当于on
以上三种方法是等价的。

vue的html中只能写vue事件不能写js事件不然无法识别会报错,如果要写js事件只能在js中写

二.d和addclass和setAttribute这几种方法区别以及怎样用js给dom添加样式

答:1.(1)js中的add方法用于向select添加一个option元素,jquery中的add方法是把元素添加到已存在的元素组合中 (2)addclass是jquery的方法不是js方法,包括removeclass和hasclass都是jquery的方法 (3)setAttribute方法添加指定的属性,并为其赋指定的值。如果这个指定的属性已存在,则仅设置/更改值。 2.用js给dom添加样式:(1)setAttribute:div.setAttribute('class', 'abc') (2)className:div.className = 'abc'

三.animation: fade 1s linear forwards;

意思是执行名称为fade的动画,时间为1s,保持线性的速度,当动画完成后,保持最后的样子。 初始opacity为0所以图形都不显示,在fade动画中定义opacity从0到1,当执行动画时就会有一个动画效果,不会显得很突兀。

typeof和instanceof 区别以及缺陷,以及解决方案

这两个方法都可以用来判断变量类型

区别:前者是判断这个变量是什么类型,后者是判断这个变量是不是某种类型,返回的是布尔值

(1)typeof

typeof返回一个数据类型的字符串,而且都是小写的字符串,返回值有'number','boolean','string','function','object','undefined'这几个

typeof 100; //'number' typeof (1==1); //'boolean' typeof 'onepixel'; //'string' typeof {} ; //'object' typeof onepixel; // 'undefined' typeof parseInt; // 'function' typeof [];//'object' typeof new Date(); //'object' 缺陷:

1.不能判断变量具体的数据类型比如数组、正则、日期、对象,因为都会返回object,不过可以判断function,如果检测对象是正则表达式的时候,在Safari和Chrome中使用typeof的时候会错误的返回"function",其他的浏览器返回的是object.

2.判断null的时候返回的是一个object,这是js的一个缺陷,判断NaN的时候返回是number

(2)instanceof 可以用来检测这个变量是否为某种类型,返回的是布尔值,并且可以判断这个变量是否为某个函数的实例,它检测的是对象的原型 [] instanceof Array; //true {} instanceof Object;//true new Date() instanceof Date;//true function Person(){}; [] instanceof Object; //true new Date() instanceof Object;//tru new Person instanceof Object;//true var array = new Array()

array instanceof Array //true

共同点:基本数据类型都可以判断 不同点:instanceof可以判断这个变量是否为某个函数的实例,而typeof不能 用法:typeof经常用来检测一个变量是不是最基本的数据类型,instanceof简单说就是判断一个引用类型的变量具体是不是某种类型的对象。

联系:typeof和instanceof的目的都是检测变量的类型,两个区别在于typeof只能用于检测基本数据类型,instanceof可以检测基本数据类型,也可以检测某些引用数据类型,因为instanceof只能通过true或者false来判断,不能直接看出来是什么类型,所以需要另外一种直观的方法: 解决方案 因为js中的一切都是对象,任何都不例外,对所有值类型应用 Object.prototype.toString.call() 方法结果如下:

console.log(Object.prototype.toString.call(123)) //[object Number] console.log(Object.prototype.toString.call('123')) //[object String] console.log(Object.prototype.toString.call(undefined)) //[object Undefined] console.log(Object.prototype.toString.call(true)) //[object Boolean] console.log(Object.prototype.toString.call({})) //[object Object] console.log(Object.prototype.toString.call([])) //[object Array] console.log(Object.prototype.toString.call(function(){})) //[object Function]

判断是否为函数

function isFunction(it) { return Object.prototype.toString.call(it) === '[object Function]'; }

判断是否为数组:

function isArray(o) { return Object.prototype.toString.call(o) === '[object Array]'; }

利用这个特性,可以写一个比typeof instanceof更准确的判断方法:

var type = function (o) {

var s = Object.propertype.toString.call(o)

return s.match(/[object(.*?)]/)[1].toLowerCase()

}

type({}); // "object" type([]); // "array" type(5); // "number" type(null); // "null" type(); // "undefined" type(/abcd/); // "regex" type(new Date()); // "date" 其他方法总结:

数组: var a = [1, 2, 3]

var b = {}

Array.isArray(a) // true

Array.isArray(b) // false