这是我参与「第四届青训营 」笔记创作活动的第7天
本堂课的重点
介绍了js数据类型转换和原型链的一些理解。
1.类型转换
(1)转换成string类型
调用toString()方法:null、undefined无法调用toString()方法
var a = 123;
a = a.toString();
console.log(typeof a);//string
调用String()函数:
var a = 123;
a = String(a);
console.log(typeof a);//string
"+"强制类型转换:
var a = 123;
a = '' + a;
console.log(typeof a);
(2)转换成number类型
Number()函数
字符串转换为数字: 如果字符串为纯数字,直接转换为数字; 如果字符串中有非数字,则转换为 NaN; 如果字符串是一个空串或者全是空格,则转换为0;
Boolean转换为数字: true:1 false:0
null转换为数字:0
undefined转换为数字:NaN
对象转换为数字:NaN
parseInt()函数:把一个字符串转换为一个整数型 parseFloat()函数:把一个字符串转换为一个浮点型
如果转换类型是null、undefined、boolean,均转换为NaN
字符串转换为数字: 如果字符串中有非数字,并且是以数字开头的,则返回数值部分
var a = '12a12'; a =parseInt(a); console.log(a);//12 console.log(typeof a);//number如果字符串中有非数字,并且是以非数字开头的,则返回NaN
var a = 'a12'; a =parseInt(a); console.log(a);//NaN console.log(typeof a);//number
(3)转换成Boolean类型
Boolean()
转换为false的情况: 为0的数字 null 空串 undefined false
其余都为true
2.原型链
JS中每个函数都存在有一个原型对象属性prototype,并且所有函数的默认原型都是Object的实例。每个继承父函数的子函数的对象都包含一个内部属性proto。该属性包含一个指针,指向父函数的prototype。若父函数的原型对象的proto属性为再上一层函数,这样就形成了原型链。
prototype(显式)、__proto__(隐式)、constructor
函数.prototype
每一个函数都有一个prototype属性,prototype的属性值是一个对象,这个对象有一个叫做constructor的属性,指向这个函数本身。
对象.__proto__
每个对象都有隐藏的属性:__prototype__
对象.__proto__ === 构造这个对象的函数的.prototype
函数.__proto__
函数.__proto__ ===Function.prototype
函数.prototype.__proto__
函数.prototype.__proto__ ==== Object.prototype
Object.__proto__
Object.__proto__ === Function.prototype
Object.prototype.__proto__
Object.prototype.__proto__ === null
Function.__proto__
Function.__proto__ === Function.prototype
Function.prototype.__proto__
Function.prototype.__proto__ === Object.prototype