【JavaScript基础笔记】全局对象、全局函数、原型/公用属性、原型链、易错点
浏览器私有属性:
document(文档) //DOM规范,由W3C制定
alert(弹框提示)
prompt(用户填写)
comfirm(用户确认)
console(开发者打印)
window.setTimeout(function(){} , 3000) //延时执行函数API
基本类型和对象
var a1 = 1; var a2 = new Number(1)
var b1 = 'asd'; var b2= new String('asd')
var c1 = false; var c2 = new Boolean (false) // c2是false对象,对象中只有空对象等于false值,所以c2不等于false而等于true
var d1 = {}; var d2 = new Object() //d1和d2都是空对象,但是不相等,因为他们在内存的地址不同
构造函数
构造函数的特点:
1:构造函数的首字母必须大写,用来区分于普通函数
2:内部使用的this对象,来指向即将要生成的实例对象
3:使用New来生成实例对象
原型 = 公用属性 = prototype
var z1 = new Object(); var z2 = new Object() //z1 !=== z2 ,但是,z1.toString === z2.toString 因为toString是公用属性
__proto__
是啥。根据定义,__proto__
是该对象(Object)的原型(prototype)的构造函数(constructor)引用。
1 function Person(){};
2 var person1 = new Person();
3 console.log(person1.constructor === Person); //true
person1.constructor === Person
person1.__proto__ === Person.prototype
number 的公用属性有如下几种
- toFixed
- toExponential
- toString(16) //可以加参数的toString
- __proto__ //number.__proto__.__proto__指向object的公用属性,即:number.__proto__.__proto__ === object.__proto__ //其他基本类型同理
——————————————————
object 的公用属性包括但不限于如下几种
- toString
- valueOf
——————————————————————
// Object.__proto__ === Function.prototype //对象.__proto__ === 函数.prototype //Object.__proto__.__proto__ 指向null
var 对象 = new 函数()
对象.__proto__ === 对象的构造函数.prototype
A instanceof B 是在 A 的原型链里查找 B 的 constructor,找到返回 true,找不到返回 false。
// 推论
var number = new Number()
number.__proto__ = Number.prototype
Number.__proto__ = Function.prototype
// 因为 Number 是 Function 的实例
var object = new Object()
object.__proto__ = Object.prototype
Object.__proto__ = Function.prototype
//因为 Object 是 Function 的实例
//Object 自身是一个构造函数。没错,是函数!函数都是继承自 Function。所以 Object instanceof Function === true。(狭义上的Object)
var function = new Function()
function.__proto__ = Function.prototype
Function.__proto__ == Function.prototye
//因为 Function 是 Function 的实例!(前一个狭义上,后一个是广义上)
//任何一个 function(){}
都是 Function
对象的实例
Function.prototype.__proto__ === Object.prototype
//js 里面一切都是继承自 Object
(除了处于原型链顶端的 null
),一切都是继承自 Object 的。
//Function 是一个对象,所以 Function instanceof Object === true。(广义上的Object)
临时对象
var n = 1
n.toString // n 不是对象,所以没有Key,但是JS之父设计了一个临时变量temp,在使用toSring的时候即时使用
n.xxx = 2 //n不是hash但是同样不会报错,赋值是成功的,但是因为同样是使用的临时变量,这行代码结束时即刻被当做垃圾回收,无法再被第二次读取
'a'.charCodeAt(0) = 97 // 'a' 的十进制Unicode码点是97
'a'.charCodeAt(0).toString(16) = '61' //'a' 的十进制Unicode码点是61
API
.trim //去掉用户输入的多余的空格
X1.concat(X2) //将两个字符串连起来
X1.slince(0,3) //把字符串的第0个到第二个切割出来
x1.replace('a','b') //把字符串里的'a'替换成'b'
易错题
1.toString() 结果会报错
1..toString() 结果等于 ‘1’
因为javascript引擎在解释代码时对于“1.toString()”认为“.”是浮点符号,但因小数点后面的字符是非法的,所以报语法错误;
而后面的“1..toString()和1.2.toStirng()”写法,javascript引擎认为第一个“.”小数点,的二个为属性访问语法,所以都能正确解释执行
constructor