1. javascript有几部分组成?

答:ECMAScript(核心) DOM(文档对象模型) BOM(浏览器对象模型)
1.ECMAScript是核心。 讲述了该语言的语法和基本对象
2.DOM 描述了处理网页内容的方法和接口。
3.BOM 描述了与浏览器进行交互的方法和接口。

2. var arr=[1,2,3,4,5,6,7,8,9]

  1. <script>
  2. // for slice
  3. var arr=[1,2,3,4,5,6,7,8,9]
  4. var arr1=[];
  5. for(i=0;i<arr.length;i+=3){
  6. var item=arr.slice(i,i+3);
  7. arr1.push(item)
  8. }
  9. console.log(arr1)
  10. </script>

结果:

  1. (3) [Array(3), Array(3), Array(3)]
  2. 0: (3) [1, 2, 3]
  3. 1: (3) [4, 5, 6]
  4. 2: (3) [7, 8, 9]

3. 如何判断数组是否包含某个值?

array.indexOf() //返回下标或-1
array.includes(searchElement[,fromindex] //返回true false
array.find(callback[,thisArg]) //首元素值或undefined
array.findindex(callback[thisArg]) //返回下标或-1

3-1. array.indexOf

判断数组中是否存在某个值,如果存在返回数组元素的下标,否则返回-1

  1. let arr = ['something', 'anything', 'nothing', 'anything'];
  2. let index = arr.indexOf('nothing');
  3. //# 结果:2

3-2. array.includes(searchElement[, fromIndex])

判断一个数组是否包含一个指定的值,如果存在返回 true,否则返回false。> 参数:searchElement需要查找的元素值。> 参数:thisArg(可选)从该索引处开始查找 searchElement。如果为负值,则按升序从 array.length + fromIndex 的索引开始搜索。默认为 0。

  1. let numbers = [12, 5, 8, 130, 44];
  2. let result = numbers.includes(8);
  3. //# 结果: true
  4. result = numbers.includes(118);
  5. //# 结果: false

3-3. array.find(callback[, thisArg])

返回数组中满足条件的第一个元素的值,如果没有,返回undefined> 参数:callbackelement 当前遍历到的元素。index 当前遍历到的索引。array 数组本身。> 参数:thisArg(可选)指定 callback 的 this 参数。

  1. // ---------- 元素是普通字面值 ----------
  2. let numbers = [12, 5, 8, 130, 44];
  3. let result = numbers.find(item => {
  4. return item > 8;
  5. });
  6. //结果: 12
  7. // ---------- 元素是对象 ----------
  8. let items = [
  9. {id: 1, name: 'something'},
  10. {id: 2, name: 'anything'},
  11. {id: 3, name: 'nothing'},
  12. {id: 4, name: 'anything'}
  13. ];
  14. let item = items.find(item => {
  15. return item.id == 3;
  16. });
  17. //# 结果: Object { id: 3, name: "nothing" }

3-4. array.findIndex(callback[, thisArg])

返回数组中满足条件的第一个元素的索引(下标), 如果没有找到,返回-1

参数:callbackelement 当前遍历到的元素。index 当前遍历到的索引。array 数组本身。 参数:thisArg(可选)指定 callback 的 this 参数。

  1. // ---------- 元素是普通字面值 ----------
  2. let numbers = [12, 5, 8, 130, 44];
  3. let result = numbers.findIndex(item => {
  4. return item > 8;
  5. });
  6. // 结果: 0
  7. // ---------- 元素是对象 ----------
  8. let items = [
  9. {id: 1, name: 'something'},
  10. {id: 2, name: 'anything'},
  11. {id: 3, name: 'nothing'},
  12. {id: 4, name: 'anything'}
  13. ];
  14. let index = items.findIndex(item => {
  15. return item.id == 3;
  16. });
  17. // 结果:

4. search 返回值?

返回起始位置 或者-1
答:search( )方法用于检索字符串中指定的子字符串 ,或检索与正则表达式相匹配的子字符串
1. stringObject 中第一个与 regexp 相匹配的子串的起始位置。
2. 注释:如果没有找到任何匹配的子串,则返回 -1。

5. 从B页面再回A A页面那个生命周期会执行?

onshow()

6. class 类定义一个student 有两个属性 name age?

  1. //定义父类 使用
  2. class Person{
  3. constructor(name,age){
  4. this.name=name;
  5. this.age=age;
  6. }
  7. }
  8. var li=new Person("lishe",12);

7. 组件中什么接收data的传值?

组件的json文件中 properties里定义接收数据的类型

8. continue break的区别?

  1. break 语句可以立即退出循环,阻止再次反复执行任何代码。
  2. continue 语句只是退出当前循环,根据控制表达式还允许继续进行下一次循环。

9. JavaScript有没有重载?

1.switch()…case
2.JavaScript的闭包原理(重点)
所谓重载,就是一组相同的函数名,有不同个数的参数,在使用时调用一个函数名,传入不同参数,根据你参 数个数,来决定使用不同的函数

10. JavaScript传递的参数放在那个对象?

讲清楚之 javascript 参数传值:

参数传值是指函数调用时,给函数传递配置或运行参数的行为,包括通过call、apply 进行传值。
在实际开发中,我们总结javascript参数传值分为基本数据类型按值传递(String、Numbe、Boolean、Null、undefind),引用数据类型按引用传递(Object, 包括Array、Function、Data)。这篇文章将要纠正这一误解: 实质上引用类型是按共享传递的。
在探索传值问题前,我们先看一下 javascript 在声明变量时是怎样分配内存的

  • 原始值:存储在栈(stack)中的简单数据段,也就是说,它们的值直接存储在变量访问的位置。这是因为这些原始类型占据的空间是固定的,所以可将他们存储在较小的内存区域 – 栈中。这样存储便于迅速查寻变量的值。
  • 引用值:存储在堆(heap)中的对象,也就是说,存储在变量处的值是一个指针(point),指向存储对象的内存地址。这是因为:引用值的大小会改变,所以不能把它放在栈中,否则会降低变量查寻的速度。相反,放在变量的栈空间中的值是该对象存储在堆中的地址。地址的大小是固定的,所以把它存储在栈中对变量性能无任何负面影响。

基本类型是将原始值保存在栈中。引用类型是将数据保存在堆中,然后在栈中建立堆地址的引用。在javascript中是不允许直接访问保存在堆内存中的对象的,所以在访问一个对象时,首先得到的是这个对象在堆内存中的地址,然后再按照这个地址去获得这个对象中的值,这就是传说中的按引用访问。而原始类型的值则是可以直接访问到的。不同的内存分配机制也带来了不同的访问机制。
而基本类型和引用类型在变量复制的时候也存在区别:

  • 原始值:在将一个保存着原始值的变量复制给另一个变量时,会将原始值的副本赋值给新变量,此后这两个变量是完全独立的,他们只是拥有相同的 value 而已。
  • 引用值:在将一个保存着对象内存地址的变量复制给另一个变量时,会把这个内存地址赋值给新变量,也就是说这两个变量都指向了堆内存中的同一个对象,他们中任何一个作出的改变都会反映在另一个身上。复制是不会产生新的堆内存消耗。

所以我们总结 javascript 中所有函数参数都是按值传递,都是把形参复制给实参,只是基本数据类型复制的是原始值,而引用类型复制的是堆内存的地址
引用类型的这种求值策略就是 按共享传递(call by sharing).

11. 用什么可以识别数组?

JavaScript有五种方法可以确定一个值到底是什么类型,分别是
typeof运算符, //判断 数据类型 返回数据类型的字符串 不能辨别数组
constructor([kənˈstrʌktə(r)] )法, //原型对象
instanceof ( [ˈɪnstəns] )运算符, //分辨数组和对象
Object.prototype.toString([ˈprəʊtətaɪp] [strɪŋ] )方法 //返回【object type】(但只有object会返回)
object.prototype.toString.call(a) //返回数组对象字符串

以及Array.isArray ([əˈreɪ])法.

11-1.用Array对象的isArray方法判断(!!!!!!!最靠谱的方法)

  1. const a = [];
  2. const b = {};
  3. Array.isArray(a);//true
  4. Array.isArray(b);//false

11-2. typeof是javascript原生提供的判断数据类型的运算符,它会返回一个表示参数的数据类型的字符串

undefined boolean number string symbol function object 不能判断是否是数组

11-3.instanceof运算符可以用来判断某个构造函数的prototype属性所指向的對象是否存在于另外一个要检测对象的原型链上 (使用instanceof运算符可以分辨数组和对象, 可以判断数组是数组)

11-4.

11-5. 用Object的toString方法判断。

  1. const a = ['Hello','Howard'];
  2. const b = {0:'Hello',1:'Howard'};
  3. const c = 'Hello Howard';
  4. Object.prototype.toString.call(a);//"[object Array]"
  5. Object.prototype.toString.call(b);//"[object Object]"
  6. Object.prototype.toString.call(c);//"[object String]"

Object.prototype.toString.call
Object.prototype.toString.apply

12. 原型和原型链?

  1. 原型: 只要在类的原型上设置了一个方法,那么所有的对象都拥有了这个方法
  2. 原型链: 1.每个对象都有一个隐藏属性proto,它指向它的原型对象

2.这个对象会享有原型上的属性或者方法
/ 如果一个对象自身没有一个方法,它就会从它的原型上去找 /

13. JavaScript有哪几种情况是false?

null undefind NAN “ “ 0

14. 字符串常用的方法

  1. String.charAt() //指定位置的字符
  2. String.concat() //拼接字符串
  3. String.slice() //提取子串
  4. String.substring() //提取子串
  5. String.substr() //提取字符串
  6. String.indexOf() //查找字符串第一次出现的位置
  7. String.trim() //去除字符串两侧的空白字符
  8. String.toLowerCase() // 转换为小写 String.toUpperCase() 转化为大写
  9. String.split() //分割字符串
  10. String.match() //匹配子字符串
  11. String.prototype.replace() //替换