1. javascript有几部分组成?
答:ECMAScript(核心) DOM(文档对象模型) BOM(浏览器对象模型)
1.ECMAScript是核心。 讲述了该语言的语法和基本对象
2.DOM 描述了处理网页内容的方法和接口。
3.BOM 描述了与浏览器进行交互的方法和接口。
2. var arr=[1,2,3,4,5,6,7,8,9]
<script>
// for slice
var arr=[1,2,3,4,5,6,7,8,9]
var arr1=[];
for(i=0;i<arr.length;i+=3){
var item=arr.slice(i,i+3);
arr1.push(item)
}
console.log(arr1)
</script>
结果:
(3) [Array(3), Array(3), Array(3)]
0: (3) [1, 2, 3]
1: (3) [4, 5, 6]
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
let arr = ['something', 'anything', 'nothing', 'anything'];
let index = arr.indexOf('nothing');
//# 结果:2
3-2. array.includes(searchElement[, fromIndex])
判断一个数组是否包含一个指定的值,如果存在返回 true,否则返回false。> 参数:searchElement需要查找的元素值。> 参数:thisArg(可选)从该索引处开始查找 searchElement。如果为负值,则按升序从 array.length + fromIndex 的索引开始搜索。默认为 0。
let numbers = [12, 5, 8, 130, 44];
let result = numbers.includes(8);
//# 结果: true
result = numbers.includes(118);
//# 结果: false
3-3. array.find(callback[, thisArg])
返回数组中满足条件的第一个元素的值,如果没有,返回undefined> 参数:callbackelement 当前遍历到的元素。index 当前遍历到的索引。array 数组本身。> 参数:thisArg(可选)指定 callback 的 this 参数。
// ---------- 元素是普通字面值 ----------
let numbers = [12, 5, 8, 130, 44];
let result = numbers.find(item => {
return item > 8;
});
//结果: 12
// ---------- 元素是对象 ----------
let items = [
{id: 1, name: 'something'},
{id: 2, name: 'anything'},
{id: 3, name: 'nothing'},
{id: 4, name: 'anything'}
];
let item = items.find(item => {
return item.id == 3;
});
//# 结果: Object { id: 3, name: "nothing" }
3-4. array.findIndex(callback[, thisArg])
返回数组中满足条件的第一个元素的索引(下标), 如果没有找到,返回-1
参数:callbackelement 当前遍历到的元素。index 当前遍历到的索引。array 数组本身。 参数:thisArg(可选)指定 callback 的 this 参数。
// ---------- 元素是普通字面值 ----------
let numbers = [12, 5, 8, 130, 44];
let result = numbers.findIndex(item => {
return item > 8;
});
// 结果: 0
// ---------- 元素是对象 ----------
let items = [
{id: 1, name: 'something'},
{id: 2, name: 'anything'},
{id: 3, name: 'nothing'},
{id: 4, name: 'anything'}
];
let index = items.findIndex(item => {
return item.id == 3;
});
// 结果:
4. search 返回值?
返回起始位置 或者-1
答:search( )方法用于检索字符串中指定的子字符串 ,或检索与正则表达式相匹配的子字符串
1. stringObject 中第一个与 regexp 相匹配的子串的起始位置。
2. 注释:如果没有找到任何匹配的子串,则返回 -1。
5. 从B页面再回A A页面那个生命周期会执行?
6. class 类定义一个student 有两个属性 name age?
//定义父类 使用
class Person{
constructor(name,age){
this.name=name;
this.age=age;
}
}
var li=new Person("lishe",12);
7. 组件中什么接收data的传值?
组件的json文件中 properties里定义接收数据的类型
8. continue break的区别?
break 语句可以立即退出循环,阻止再次反复执行任何代码。
而 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方法判断(!!!!!!!最靠谱的方法)
const a = [];
const b = {};
Array.isArray(a);//true
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方法判断。
const a = ['Hello','Howard'];
const b = {0:'Hello',1:'Howard'};
const c = 'Hello Howard';
Object.prototype.toString.call(a);//"[object Array]"
Object.prototype.toString.call(b);//"[object Object]"
Object.prototype.toString.call(c);//"[object String]"
Object.prototype.toString.call
Object.prototype.toString.apply
12. 原型和原型链?
- 原型: 只要在类的原型上设置了一个方法,那么所有的对象都拥有了这个方法
- 原型链: 1.每个对象都有一个隐藏属性proto,它指向它的原型对象
2.这个对象会享有原型上的属性或者方法
/ 如果一个对象自身没有一个方法,它就会从它的原型上去找 /
13. JavaScript有哪几种情况是false?
14. 字符串常用的方法
String.charAt() //指定位置的字符
String.concat() //拼接字符串
String.slice() //提取子串
String.substring() //提取子串
String.substr() //提取字符串
String.indexOf() //查找字符串第一次出现的位置
String.trim() //去除字符串两侧的空白字符
String.toLowerCase() // 转换为小写 String.toUpperCase() 转化为大写
String.split() //分割字符串
String.match() //匹配子字符串
String.prototype.replace() //替换