前端基础知识总结1——基础知识

╰+攻爆jí腚メ 2022-06-04 06:41 533阅读 0赞






目录

1.基础知识
1.1 变量类型
1.2 typeof运算符
1.3 变量计算——强制类型转换
1.4 面试题
2.原型、原型链
2.1 构造函数
2.2 原型规则和示例
2.3 循环对象自身的属性
2.4 原型链
2.5 instanceo
2.6 面试题
3.作用域、闭包
3.1 执行上下文
3.2 this
3.3 作用域
3.4 作用域链
3.5 闭包
3.6 面试题
4.异步、单线程







1.基础知识

总结大纲:

  • 基础知识:原型、原型链;作用域、闭包;异步、单线程
  • JS API:DOM操作;Ajax;事件绑定
  • 开发环境:版本管理;模块化;打包工具
  • 运行环境:页面渲染;性能优化






1.1 变量类型

变量类型分为值类型和引用类型
值类型:number;string;boolean;null;undefined
引用类型:对象、数组、函数







1.2 typeof运算符

typeof可检测出六种类型:undefined、string、number、boolean、object、function

  1. typeof undefined; //undefined
  2. typeof "abc"; //string
  3. typeof 123; //number
  4. typeof true; //boolean
  5. typeof {}; //object
  6. typeof []; //object
  7. typeof null; //object
  8. typeof console.log; //function

注意:

  1. null的类型为object;
  2. typeof只能区分值类型的详细类型,不能区分值类型
  3. 引用类型只能区分出函数






1.3 变量计算——强制类型转换

强制类型转换共四种情况:字符串拼接、==运算符、if语句、逻辑运算符

字符串拼接

  1. var a = 100 + 10; //110
  2. var b = 100 + '10'; //10010

将数字转换为字符串

==运算符

  1. console.log(100=="100"); //true,字符串转为数字
  2. console.log(0==""); //true,字符串转为数字
  3. console.log(null==undefined); //true

转化规则:

  • 对象==对象,永远不相等
  • 对象==字符串,先将对象转换为字符串(调用toString的方法,然后再进行比较)
  • 对象==布尔类型,对象先转换为字符串(toString),然后再转化为数字(Number),布尔类型也转换为数字(true是1,false是0),最后让两个数字比较。”“是0。
  • 对象==数字,对象先转化为字符串(toString),然后把字符串再转为数字(Number )
  • 数字==布尔,布尔转化为数字
  • 数字==字符串,字符串转化为数字
  • 字符串==布尔,都转化为数字
  • null==undefined,结果是true
  • null或者undefined和其他任何的数据类型比较都不相等

if语句

  1. var a = true, b = 100, c = '';
  2. if (a) {
  3. console.log("1"); //1
  4. }
  5. if (b) {
  6. console.log("2"); //2
  7. }
  8. if (c) {
  9. console.log("3");
  10. }

在if中是false的情况:0、NaN、”“、null、false

逻辑运算符

  1. console.log(10 && 0); //0
  2. console.log("" || 'abc'); //'abc'
  3. console.log(!window.abc); //true

判断一个变量会被当做true还是false:
两次取反

  1. var a = 100;
  2. console.log(!!a); //true






1.4 面试题

1.何时使用===何时使用==?

  1. if(obj.a==null){ }

这里相当于obj.a===null || obj.a===undefined的简写形式
这是jQuery源码中推荐的写法
除了这个之外,其他的全部都用===

2.JS中有哪些内置函数?

9个,分别是:
Object、Array、Boolean、Number、String、Function、Date、RegExp、Error
而Math、JSON是内置对象

3.JS按照存储方式区分为哪些类型,并描述其特点?

值类型和引用类型
特点:值类型把数值分块存在内存中,引用类型多个变量共用内存块,通过变量指针赋值

4.如何理解JSON?

JSON不过是一个JS对象而已

  1. JSON格式的字符串转换为JSON格式的对象:
  2. JSON.parse('{"a":10,"b":20}'); //{a: 10, b: 20}
  3. JSON格式的对象转换为JSON格式的字符串:
  4. JSON.stringify({
  5. "a": 10, "b": 20}); //"{"a":10,"b":20}"






2.原型、原型链






2.1 构造函数
  1. function Foo(name, age) {
  2. this.name = name;
  3. this.age = age;
  4. this.class = 'class-1';
  5. //return this; 默认有这一行
  6. }
  7. var f = new Foo('zhangsan', 20);
  8. //var f1 = new Foo('lisi',30); 创建多个对象

var a = {}; 其实是var a = new Object();的语法糖
var a = []; 其实是var a = new Array();的语法糖
function Foo(){...} 其实是var Foo = new Function(...);的语法糖

使用instanceof判断一个函数是否是一个变量的构造函数,如:变量 instanceof Array;







2.2 原型规则和示例

1.所有的引用类型(数组、对象、函数),都具有对象特性,即可自由扩展属性(除了null意外)

  1. var obj = {};
  2. obj.a = 100;
  3. var arr = [];
  4. arr.a = 100;
  5. function fn() { }
  6. fn.a = 100;

2.所有的引用类型(数组、对象、函数),都有一个__proto__(隐式原型)属性,属性值是一个普通的对象

  1. obj.__proto__;
  2. arr.__proto__;
  3. fn.__proto__;

3.所有的函数,都有一个prototype(显式原型)属性,属性值也是一个普通的对象

  1. fn.prototype;

4.所有的引用类型(数组、对象、函数),__proto__属性值指向它的构造函数的”prototype”属性值

  1. obj.__proto__ === Object.prototype;

5.当试图得到一个引用对象的某个属性值时,如果这个对象本身没有这个属性,那么会去它的__proto__即它的构造函数的prototype中寻找

  1. //构造函数:
  2. function Foo(name, age) {
  3. this.name = name;
  4. }
  5. Foo.prototype.alertName = function () {
  6. alert(this.name);
  7. };
  8. //创建实例:
  9. var f = new Foo('zhangsan');
  10. f.printName = function () {
  11. console.log(this.name);
  12. };
  13. //测试:
  14. f.printName();
  15. f.alertName();






2.3 循环对象自身的属性
  1. for (var item in f) {
  2. if (f.hasOwnProperty(item)) {
  3. console.log(item); //name printName
  4. }
  5. }

高级浏览器已经在for in中屏蔽了来自原型的属性
不过建议加上判断,来保证程序的健壮性







2.4 原型链






2.5 instanceof

用于判断引用类型属于哪个构造函数的方法
如:
f instanceof Foo的判断逻辑是:
f的__proto__一层一层往上,能否对应到Foo.prototype
f instanceof Object同理







2.6 面试题

1.如何准确判断一个变量是数组类型?

  1. var arr = [];
  2. arr instanceof Array; //true

2.写一个原型链继承的例子?

  1. function Elem(id) {
  2. this.elem = document.getElementById(id);
  3. }
  4. Elem.prototype.html = function (val) {
  5. var elem = this.elem;
  6. if (val) {
  7. elem.innerHTML = val;
  8. return this; //链式操作
  9. } else {
  10. return elem.innerHTML;
  11. }
  12. };
  13. Elem.prototype.on = function (type, fn) {
  14. var elem = this.elem;
  15. elem.addEventListener(type, fn);
  16. return this;
  17. };
  18. var div1 = new Elem('div1');
  19. div1.html('<p>hello world</p>').on('click', function () {
  20. alert('clicked')
  21. }).html('<p>JavaScript</p>');

3.描述new一个对象的过程?

创建一个新对象 —> this指向这个新对象 —> 执行代码,即对this赋值 —> 返回this

4.Zepto(或其他框架)源码中如何使用原型链?







3.作用域、闭包






执行上下文
  1. console.log(a); //undefined
  2. var a = 100;
  3. fn('zhangsan');
  4. function fn(name) {
  5. age = 20;
  6. console.log(name, age); //'zhangsan' 20
  7. var age;
  8. }

范围;一段<script>或者一个函数
全局:变量定义、函数声明
函数:变量定义、函数声明、this、arguments







this

this要在执行时才能确认值,定义时无法确认

如何区分this?

1.函数执行,首先找到在哪执行,看函数名前面是否有点,有的话,“.”前面是谁,this就是谁,没有的话this就是window

  1. function fn() {
  2. console.log(this);
  3. }
  4. var obj = {fn: fn};
  5. fn(); //window
  6. obj.fn(); //obj
  7. function sum() {
  8. fn();
  9. }
  10. sum(); //window
  11. var oo = {
  12. sum: function () {
  13. fn();
  14. }
  15. };
  16. oo.sum(); //window

2.自执行函数的this永远是window
3.给元素的某一个事件绑定方法,当事件触发的时候,执行对应的方法,方法中的this是当前的元素

  1. <div id="div1">有本事点我啊</div>
  2. document.getElementById("div1").onclick = fn; //fn中的this是div1
  3. function fn() {
  4. console.log(this);
  5. }
  6. document.getElementById("div1").onclick = function () { //this是div1
  7. fn(); //fn中的this是window
  8. };

4.在构造函数模式中,类中(函数体中)出现的this.xxx = xxx中的this是当前类的一个实例

  1. function Foo(age) {
  2. this.age = age;
  3. }
  4. var f = new Foo("12");
  5. f.age; //12

5.通过call、apply来改变this


call、apply、bind知识点总结







4.异步、单线程

发表评论

表情:
评论列表 (有 0 条评论,533人围观)

还没有评论,来说两句吧...

相关阅读

    相关 前端基础知识总结---CSS篇

    本部分主要是笔者在复习 CSS 相关知识和一些相关面试题时所做的笔记,如果出现错误,希望大家指出! 目录 1.介绍一下标准的 CSS 的盒子模型?低版本 IE 的

    相关 前端基础知识

    帧元素 (有窗口元素:select元素,object元素,插件 IFrame)> HTML元素优先(帧元素: ) 表单(文本区域,列表框,各种输入框) > 非表单元素 浏览

    相关 前端基础知识总结

    1.将文字显示在图片上: (1) 第一种方式:将图片作为背景(使用条件,图片的大小跟div的大小一样,照片才能显示完整,不然只会显示一部分) <div style