- 1. Js的数据类型
- 基本数据类型(5个):number,string,boolean,undefined,null,object
- 引用数据类型:object对象数据类型,array数组数据类型,正则表达式,function函数数据类型
- 两种数据类型的区别:
1) 基本数据类型存储在栈中,占据空间小,大小固定,被频繁使用,传送的数据无法改变
2)引用数据类型存储在堆中,占据空间大,大小不固定,在栈中存储了指针,指针指向堆中的起始地址,值是可变的- 检测数据类型的方法
1)检测数据类型的运算符:typeof()
2)instanceof:检测某个实例是否属于这个类
3) constructor 获取当前实例的构造器
4) Object.prototype.toString.call:获取当前实例的所属类信息- null和undefined的区别
- Null:只包含一个值,就是null,表示变量中还没有被存储引用类型的数据
2)undefined:声明变量没有被初始化或赋值,或根本就没有定义该变量,默认为undefined
- 2. 创建对象的方法
- 字变量形式
var obj = {
name: 'Tom',
age: 10,
gender: '男'
};
- 构造方法
// 构造方法定义对象
function Student(name,age,gender){
this.name=name;
this.age=age;
this.gender=gender;
this.play= function () {
console.log("羽毛球");
}
}
var obj=new Student('张三',12,'男');
console.log(obj);
01、JavaScript 中 this 是如何工作的
02、请解释原型继承 的原理。
03、什么是闭包 (closure),如何使用它,为什么要使用它?
04、.call 和 .apply 的区别是什么?
05、请指出 JavaScript 宿主对象 (host objects) 和原生对象 (native objects) 的区别?
06、请指出以下代码的区别:function Person(){}、var person = Person()、var person = new Person()?
07、请解释变量声明提升 (hoisting)。
08、什么是 “use strict”; ? 使用它的好处和坏处分别是什么?
09、什么是事件循环 (event loop)?
10、请解释同步 (synchronous) 和异步 (asynchronous) 函数的区别。 作者:前端大魔王 https://www.bilibili.com/read/cv1664253?from=search&spm_id_from=333.337.0.0 出处:bilibili
1、JavaScript this指针、闭包、作用域
this:指向调用上下文
闭包:内层作用域可以访问外层作用域的变量
作用域:定义一个函数就开辟了一个局部作用域,整个js执行环境有一个全局作用域
2、JavaScript的同源策略
一段脚本只能读取来自于同一来源的窗口和文档的属性,这里的同一来源指的是主机名、协议和端口号的组合
http,ftp:协议
主机名;localhost
端口名:80:http协议的默认端口
https:默认端口是8083
同源策略带来的麻烦:ajax在不同域名下的请求无法实现,
如果说想要请求其他来源的js文件,或者json数据,那么可以通过jsonp来解决
3、看下列代码,输出什么?解释原因
var undefined;//此时undefined这个变量的值是undefined
undefined == null; // true
1 == true; // true
此时会把布尔类型的值转换为数字类型 true=1 false=0
2 == true; // false
0 == false; // true
0 == ‘’; // true
NaN == NaN; // false
[] == false; // true
[] == ![]; // true
undefined与null相等,但不恒等(===)
一个是number一个是string时,会尝试将string转换为number
尝试将boolean转换为number,0或1
尝试将Object转换成number或string,取决于另外一个对比量的类型
所以,对于0、空字符串的判断,建议使用 “=” 。“=”会先判断两边的值类型,类型不匹配时为false。
4、请你谈谈Cookie的弊端
1.Cookie
数量和长度的限制。每个domain最多只能有20条cookie,每个cookie长度不能超过4KB,否则会被截掉。
2.安全性问题。如果cookie被人拦截了,那人就可以取得所有的session信息。即使加密也与事无补,因为拦截者并不需要知道cookie的意义,他只 要原样转发cookie就可以达到目的了。
3.有些状态不可能保存在客户端。例如,为了防止重复提交表单,我们需要在服务器端保存一个计数器。如果我们把这个计数器保存在客户端,那么 它起不到任何作用。
5、哪些操作会造成内存泄漏?
内存泄漏指任何对象在您不再拥有或需要它之后仍然存在。
垃圾回收器定期扫描对象,并计算引用了每个对象的其他对象的数量。如果一个对象的引用数量为0(没有其他对象引用过该对象),或对该对象的 惟一引用是循环的,那么该对象的内存即可回收。
-
setTimeout 的第一个参数使用字符串而非函数的话,会引发内存泄漏。
-
闭包
-
控制台日志
-
循环(在两个对象彼此引用且彼此保留时,就会产生一个循环)
6、下面的输出多少?
var a = 6;
setTimeout(function () {
var a = 666;//由于变量a是一个局部变量
alert(a); // 输出666,
}, 1000);
a = 66;
因为var a = 666;定义了局部变量a,并且赋值为666,根据变量作用域链,
全局变量处在作用域末端,优先访问了局部变量,从而覆盖了全局变量。
var a = 6;
setTimeout(function () {
//变量声明提前
alert(a); // 输出undefined
var a = 666;
}, 1000);
a = 66;
因为var a = 666;定义了局部变量a,同样覆盖了全局变量,但是在alert(a);之前
a并未赋值,所以输出undefined。 作者:编码梦想家 https://www.bilibili.com/read/cv10018658?from=search&spm_id_from=333.337.0.0 出处:bilibili