-
//下面进行类型检测的情况,就是说有五种方法,
undefined
//1、首先是第一种方法
undefined
typeof 100
"number"
typeof trueLog
"function"
typeof [1,2]
"object"
typeof (1,23)
"number"
typeof NaN
"number"
typeof null
"object"
//这里面就会奇怪为什么这个null会和object相同,这里面是如果null的类型是null的话会出现大量的问题,所以由于历史原因,就改成object
undefined
//2、但是当我们想判断的更加细节一点,比如说到底是什么object呢,这个时候我们就会用到obj instanceof Object
undefined
//这里面要求了只能判断object这个,基本格式就是obj instanceof Object (它的作用就是左边这个对象的原型链上是否有右边这个构造函数的属性)
undefined
[1,2] instanceof Array
true
//下面介绍一种特殊的
undefined
function Person(){}
undefined
function Student(){}
undefined
Student.prototype = new Person();
Person {}__proto__: constructor: ƒ Person()__proto__: constructor: ƒ Object()hasOwnProperty: ƒ hasOwnProperty()isPrototypeOf: ƒ isPrototypeOf()propertyIsEnumerable: ƒ propertyIsEnumerable()toLocaleString: ƒ toLocaleString()toString: ƒ toString()valueOf: ƒ valueOf()__defineGetter__: ƒ __defineGetter__()__defineSetter__: ƒ __defineSetter__()__lookupGetter__: ƒ __lookupGetter__()__lookupSetter__: ƒ __lookupSetter__()get __proto__: ƒ __proto__()set __proto__: ƒ __proto__()
Student.prototype.constructor = Student
ƒ Student(){}
function Student(){}
undefined
var bos = new Student()
undefined
bos instanceof Student
true
var one = new Person()
undefined
one instanceof Person
true
one instanceof Student
false
//这个是因为其实student下面有一个prototype叫做person
undefined
//3、object.prototype.toString.apply([]);
undefined
Object.prototype.toSti
undefined
Object.prototype.toString.apply([])
"[object Array]"
//但是上面要注意到在IE678中的null是object的类型
undefined
Object.prototype.toString.apply(function()[])
VM10959:1 Uncaught SyntaxError: Unexpected token '['
//4、还有就是constructor这个查询方式,这个其实是一个指向原型的一个构造器,是任何一个对象都有的,但是它是可以被改写的
undefined
//5、duck type:
undefined
//前三者的区别
undefined
//1、typeof比较适合基本类型的判断,但是要注意的就是null会返回为object,但是可以用严格等于的方式来判断是不是null
undefined
//2、另外就是判断对象用instanceof ,还有就是
undefined
Object.prototype.toString.apply([1])
"[object Array]"
查看全部 -
//隐士转换
undefined
num = 10;
10
num-""
10
num + ''
"10"
num-''
10
//==的运算
undefined
//在用==时候会把类型进行一定程度的转换
undefined
'1.23' = 1.23
VM2590:1 Uncaught SyntaxError: Invalid left-hand side in assignment
'1.23' = 1.23;
VM2597:1 Uncaught SyntaxError: Invalid left-hand side in assignment
'1.23' == 1.23;
true
0==false
true
null==undefined
true
new Object() = new Object();
VM2750:1 Uncaught SyntaxError: Invalid left-hand side in assignment
new Object() == new Object();
false
//严格等于
undefined
//会先判断类型是否相等,如果不相同返回false,相等的话,要注意这个时候null和undefined不想等了,但是NaN是和任何的东西包括他自己都不想等的
undefined
5675:1 Unchecked runtime.lastError: The message port closed before a response was received.
//还要注意就是在相似的时候只是简单进行类型的转换,而到了严格等于的时候就要求进行在没有转换的情况下依旧想等
undefined
[1,2] == [1,2];
false
//上面的很奇怪对不对,其实是不想等的,就和两个new Object一样,都是不能相等的,即便==
undefined
//比较重要的一点是==和===的区别,当类型相同的时候二者是没有区别的,但是当类型不同的时候首先情况下是,当number和string比较的时候,会把string转换成number,将对象转换成相应的基本类型
查看全部 -
undefined
32 + 32
64
32+“32”
VM1362:1 Uncaught SyntaxError: Invalid or unexpected token
32+"32"
"3232"
32-"32"
0
//上面是一些隐形的转换逻辑
undefined
//常见的转换类型有number string bool null undefined
undefined
查看全部 -
var
查看全部 -
也就是说这里面有三种查看元素类型的方式,一个是typeof,一个是instanceof还有一个prototype原型属性
查看全部 -
函数声明和函数表达式
查看全部 -
数组操作:
unshift:数组头部添加元素
shift:数组头部去除元素
push:数组尾部添加元素
pop:数组尾部移除元素
查看全部 -
js对象的构造图
查看全部 -
对象属性的一些属性。
查看全部 -
两个空对象是不会===的,除非x===x
查看全部 -
js类型检测:
1、typeOf在判断基本类型和函数对象非常方便。问题在于不能判断更深层的Object类型,譬如:数组类型、null类型
2、判断对象类型,更常用的是 obj instanceof Object。其底层原理是:判断左边的变量对象的原型链中是否有右边的构造函数的prototype属性3、Object.prototype.toString.apply(),能判断出Array、Funtion、Null、Undefined。但是ie8以下不兼容
查看全部 -
1、js是弱类型语言,弱类型体现在创建A类型变后后,又可创建B类型变量。('33' - 33 = 0),字符串'33'被看作为数字33,从而 = 0;
2、js的数据类型分基本类型和复杂类型。基本类型(number,string,boolean,null,undefined)复杂类型(object:Function、Date、Array....)
查看全部 -
get set 方法 修改属性的不同
查看全部 -
函数是一种特殊的对象
查看全部 -
完整的继承图查看全部
举报