JS中需要注意的一些知识点

(不做详细分析,只总结要知道哪一块知识点.可对照回去自己学习)
基础知识:
1.原型 原型链
2.作用域 闭包
3.异步 单线程

js API:
1.DOM操作
2.Ajax
3.事件绑定

开发环境
1.版本管理
2.模块化
3.打包工具

运行环境:
1.页面渲染
2.性能优化
3.安全性能

人:
1.有自我查询知识的能力
2.自我查询了解知识的欲望
3.基础,扎实的基础会让你高效学习新技术

1.JS中使用typeof能够得到的哪些类型
考点:解释变量类型
值类型:undefined,string,number,Boolean
引用类型: object(包括:[],{}), fucntion(赋值时类似指针)
特殊引用类型:null:object

2.何时使用=== 何时使用 ==?
if(obj.a == null){
//这里相当于 obj.a === null || obj.a === undefined,简写形式
}
考点:强制类型转换(变量计算)
值类型:
字符串拼接
== 运算符

其中 0 和 ' '都会被转换为false ,所以它们相等
null 和undefined也是会转换为false然后进行比较,同为false ,所以是true.
false的情况:
0
NaN
''
""
null
undefined
false


if语句


逻辑运算

3.window.onload 和DOMContentLoaded的区别
考点:浏览器渲染过程

4.用JS 创建10个<a>标签,点击的时候弹出来对应的序号
考点:作用域

5.简述如何实现一个模块加载器,实现类似 require.js的基本功能
考点:js模块化

6.实现数组的随机排序(取反,拼接)
考点:js基础算法

7.js中有哪些内置函数
Object
Array
Boolean
Number
String
Function
Date
RegExp
Error
如下图:

内置对象


8.js变量按照存储区分哪些类型,并描述其特点

9.如何理解JSON
JSON 只不过是一个JS对象,一种数据格式
两个重要API
1.JSON.parse(text):这个方法可以将数据转换为JavaScript对象
参数:
text: 必需,一个有效的JSON字符串
2.JSON.stringify(vlaue): 将JavaScript对象转换为字符串
参数:
value:必需,一个有效的JSON对象
其他:
JavaScript函数eval()可用于将JSON文本转换为JavaScript对象,为了避免语法错误,必需把文本包围在括号中,这样才能避免错误.
语法:var obj = eval("(" + txt + ")");
如: var student = '{"name":"xinghai","age":12}';
var obj = eval = ("(" +student + ")");
如下图:
缺点:eval()函数存在安全问题:eval()函数可编译并执行任何JavaScript代码.这隐藏了一个潜在的安全问题.也就是如果数据里头包含JavaScript代码,eval会无条件执行.这是一个非常危险的情况.慎用eval.
如下图:
可以看到,就算传递进去的是一个函数对象,也被执行了

为了解决这个问题,可以使用parse,传递进去的参数一开始不是严格的json数据,就直接报错,不会执行js代码.
如下图:



10. 如何判断一个变量是数组类型


11. 写一个原型链继承的例子
<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title></title>

    </head>

    <body>
        <div id="div1">
            vfd
        </div>
        <script>
            function Elem(id) {
                this.elem = document.getElementById(id);
            }
            Elem.prototype.html = function(val) {
                var elem = this.elem;
                if(val) {
                    elem.innerHTML = val;
                    return this.innerHTML;
                } else {
                    return elem.innerHTML;
                }
            }
            Elem.prototype.on = function(type, fn) {
                var elem = this.elem;
                elem.addEventListener(type, fn);
            }
            var div1 = new Elem("div1");

            div1.html("hello");
            div1.on("click", function() {
                alert("clicked");
            })
        </script>
    </body>

</html>



12. 描述new一个对象的过程
1). 创建一个新对象
2). this 指向这个新对象
3). 执行代码,即对this赋值
4). 返回this

13. zepto(或者其他框架)源码中如何使用原型链

14. 构造函数

15. 构造函数- 扩展
var a = {} 其实是 var a = new Object()的语法糖
var a = [] 其实是 var a = new Array()的语法糖
function Foo(){...} 其实是 var Foo = new Function()
使用instanceof判断一个函数是否是一个变量的构造函数

16. 原型规则和示例
1). 所有的引用类型(数组,对象,函数),都具有对象特性,即可自由扩展属性(除了"null"意外)
2) 所有的引用类型(数组,对象,函数),都有一个_proto_(隐式)属性,属性值是一个普通的对象
3) 所有的函数,都有一个prototype(显式)属性,属性值也是一个普通的对象
4) 所有的引用类型(数组,对象,函数),_proto_属性值指向它的构造函数的"prototype"属性值
5) 当试图得到一个对象的某个属性时,如果这个对象本身没有这个属性,那么回去它的_proto_(即它的构造函数的prototype )中寻找.
用代码解释,如下图:

循环对象自身的属性
注意:高级浏览器已经在for in 中屏蔽了来自原型的属性
但是还是推荐加上判断,保证程序的健壮性,如下图:



17. 原型链


18.instanceof
用于判断引用类型属于哪个构造函数的方法


最后:如何更高效率地写代码,代码优化
考点:安全性问题,内存

答题步骤
1.看出考点
2.不变应万变
3.题目到知识再到题目
4.阅读源码是高效提高技能的方式
5.但不能"埋头苦钻" 有技巧在其中












猜你喜欢

转载自blog.csdn.net/LPLIFE/article/details/80494882