[JavaScript]JS基础知识(上)

变量类型及计算

变量类型

值类型 vs  引用类型

值类型:

引用类型:

引用类型:对象、数组和函数

特点:无限扩展属性,内存占用可能过大,故共用内存空间以节省空间

Typeof运算符详解

注:null也是对象

1~4行是值类型,5~8行是引用类型,但JS只能区分函数与非函数,而不能区分数组和对象。

变量计算

强制类型转换

字符串拼接

数字 + 字符串时将数字自身转为字符串。

==运算符

==计算会试图让前后的比较对象相等,故发生类型转换

if语句

100被强制转换为true,而’’被转换为false

逻辑运算

题目:

1、何时使用 === 何时使用 == ?

除了这种情况外,全部使用===

2、JS中有哪些内置函数

3、如何理解JSON?

Json既是数据格式,也是数据对象。

原型和原型链

构造函数

构造函数需使用大写开头!

扩展:

var a = {} 其实是 var a = new Object() 的语法糖

Var a = [] 其实是 Var a = new Array() 的语法糖

Function Foo(){…} 其实是 var Foo = new Function(…)的语法糖

使用instanceof判断一个函数是否是一个变量的构造函数

判断一个变量是否为“数组”: 变量 instanceof Array

5条原型规则

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

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

输出结果:

 

 

 

 

 

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

输出结果:

 

 

 

 

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

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

this:

永远指向f自身,故能读取属性

循环对象自身的属性

原型链

注意,toString()是Object.prototype中的方法,f通过读取__proto__的方式寻找该方法,但它的上一级原型并没有这个方法,故寻找隐式原型的隐式原型,最终在Object中找到了toString()方法。

Instanceof的用法介绍

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

F instanceof Foo 的判断逻辑是:

F 的 __proto__ 一层一层往上,能否对应到 Foo.prototype

再试着判断 f instanceof Object

题目:

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

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

封装DOM查询:

3、描述new一个对象的过程

(1)创建一个新对象
(2)this指向这个新对象
(3)执行代码,即对this赋值
(4)返回this