代码拉取完成,页面将自动刷新
``` javascript
<script type ="text/javascript"
//1.基本
//typeof返回数据类型的字符串表达
var a
console.log(a,typeof a==='undefined',a===undefined )// undefined 'undefined' true true
//打印输出怎么知道这个a是undefined值 直接用typeof a=== 不能用instancesof
console.log(undefined === 'undefine')//false
a=3
console.log(typeof a==='number' a===3)//true 三个等不能判断是否是数值类型,因为也可以等于4
a='atguigu'
console.log(typeof a==='string')//true(string小写)
a=true
console.log(typeof a==='boolean')//true
a=null
console.log(typeof a,a===null)//object 不能判断 应该用全等
```
``` javascript
//2.对象
var b1={
b2:[1,'abc',console.log]//最后是什么数据类型
b3:function(){
console.log('b3')
return function(){
return 'xfzhang'
}
}
}
console.log(b1 instanceof Object,b1 instanceof Array)//布尔 判断B1是不是b1的实例 返回true
console.log(b1.b2 instanceof Array, b1.b2 instanceof Object)//true true
console.log(b1.b2 instanceof Function,b1.b3 instanceof Object )//true
console.log(typeof b1.b3)//'function'
console.log(typrof b1.b2[2]==='function')
b1.b2[2](4)//左边是函数,特点是执行调用 加括号执行调用
console.log(b1.b3()())
//instanceof 实例 Ainstanceof B A是不是B的实例 A是不是B的构造函数
new Object()//构造函数
```
``` javascript
function Person (name,age){//构造函数 类型 是对象 函数是一种特别的对象
this.name =name
this.age=age
}
var p =new Persion('tom',12) // 根据类型创建的实例对象 new的时候才能确定构造函数大写了
//Person('jack',12)
```
var b =null
b=['atguigu',12]
b=null//释放数组 切断,让b指向的对象成为垃圾对象(被垃圾回收器回收)
var c =function(){
}
typeof c
var age = 18
console.log(age)
var obj ={name:'Tom'}
console.log(obj.name)
function fn(){
var obj ={name:'Tom'}
}
var a =3
a = function (){
}
var b='abc'
a=b
b={}
a=b
var obj1 ={name:'Tom'}
var obj2 =obj1
obj1.name ='Jack'
console.log(obj2.name)//'Jack'
var obj1 ={name:'Tom'}
var obj2 = obj1
obj2.age =12
console.log(obj1.age)//12
function fn (obj){
obj.name='Bob'//name被修改了
}
fn(obj1)//实参赋值给形参
console.log(obj2.name)//Bob 三个引用变量指向一个对象
var a = {age: 12}
var b = a
a ={name:'BOB',age:13}
b.age=14
console.log(b.age,a.name,a.age)//14 Bob 13
function fn2(obj){
obj={age:15}//修改引用变量的值
}
fn2(a)
console.log(a.age)//13
var a = 3
function fn (a){
a =a+1
}
fn(a)
console.log(a)//在等号的左边是写 其他都是读
function fn2 (obj){
}
var obj ={name:'Tom'}
fn2(obj)
var a =3
var obj ={}
obj =undefined
function fn(){
var b ={}
}
fn()//b是自动释放b所指向的对象是在后面的某个时刻由垃圾回收器回收
var p = {
name:'Tom',
age:12,
setName:function(name){
this.name = name
},
setAge:function(age){
this.age = age
}
}
p.setName('Bob')
p['setAge'](23)
console.log(p.name,p.setName)
console.log(p.name,p['age'])
var p={}
//1给p对象添加属性: content-type:text/json
//p.content-type ='text/json'
p['content-type']='text/json'
console.log(p['content-type'])
//2变量名不确定
var propName='myAge'
var value =18
//p.propName=value 不能用
p[propName]=value
``` javascript
function showInfo (age){
if(age<18){
console.log('未成年,再等等!')
}else if (age>60){
console.log('算了吧!')
}else {
console.log('刚好!')
}
}
showInfo(17)
showInfo(20)
showInfo(65)
function fn1(){//表达式
console.log('fn2()')
}
fn1()
fn2()
var obj = {}
function test2(){
this.xxx ='atguigu'
}
//obj.test2()不能直接调用,根本就没有
test2.call(obj)//obj.test2()//通过obj调用test2 //可以让一个函数成为指定任意对象的方法进行调用
console.log(obj.xxx)
```
document.getElementById('btn').onclick=function(){//dom事件回调函数
alert(this.innerHTML)
}
//定时器
//超时定时器
//循环定时器
//延时定时器
setTimeout(function(){
alert('到点了')
},2000)
function(){
console.log('....')
}//函数没取名,没执行无意义
(function(){//匿名函数自调用
console.log('....')
})()
(function(){//匿名函数自调用
var a=3
console.log(a+3)
})()
var a = 4
console.log(a)
//大括号里面是局部空间。写外面是全局变量a,写里面是局部
;(function(){
var a = 1
function test({
console.log(++a)
})
window.$=function({//向外暴露一个全局函数
return{
test:test
}
})
})()
//如果我要取到a(局部变量)
$().test()//$是函数后面为什么能调用test ,执行后返回的是一个对象 这个对象有一个test方法
function Person(color){
console.log(this)
this.color=color;
this.getColor=function(){
console.log(this)
return this.color;
};
this.setColor = function(color){
console.log(this)
this.color = color;
};
}
Person('red')//this是谁? window
var p = new Person("yello");//this是谁?p 指定的是当前对象
p.getColor();//this 是谁?p
var obj={};
p.setColor.call(obj,"black");//this是谁?obj
var test = p.setColor;
test();//this 是window直接调的
function fun1(){
function fun2(){
console.log(this);
}
fun2()//this 是window
}
console.log(Date.prototype,typeof Date.prototype)
function Fun(){ //ALT+SHIFT+R(RENAME)
}
console.log(Fun.prototype)//__proto_默认指向一个object空对象没有属性
console.log(Data.prototype.constructor===Date)
console.log(Fun.prototype.constructor===fun)
//给原型对象添加属性(一般是方法)==>实例对象可以访问
Fun.prototype.test =function(){
console.log('test()')
}
var fun = new Fun()
fun.test()
function Fn(){ //内部语句:this.prototype={}
}
//- 1、每个函数function 都有一个prototype,显式原型属性(引用变量),默认指向一个空的object对象
console.log(Fn.prototype)
//- 2、每个实例对象都有一个_ *proto* _,可称为隐式原型
var fn = new.Fn()//内部语句:this.__proto__=Fn.prototype
console.log(fn.__proto__)//保存的都是地址值 所以才共同指向原型对象 显示原型
//-3、对象的隐式原型的值为其对应构造函数的显示原型的值
console.log(Fn.prototype===fn.__proto__)//true
//给原型添加方法
Fn.prototype.test=function(){
console.log('test()')
}
//通过实例对象调用原型的方法
fn.test()
function Fn(){
this.test1=function(){
console.log('test1()')
}
}
Fn.prototype.test2=function(){
console.log('test2()')
}
var fn = new Fn()
fn.test1()
fn.test2()
console.log(fn.toString())
fn.test3()//undefined
test3()
/*
1.函数的显示原型指向的对象:默认是空object实例对象(但是object不满足)
*/
console.log(Fn.prototype instanceof Object)//true
console.log(Object.prototype instanceof Object) //false
console.log(Function.prototype instanceof Object)//true
/*
2.所有函数都是Function 的实例(包括Function它自身)
*/
console.log(Function.__proto__===Function.prototype)
/*
3.object的原型对象是原型链的尽头
*/
console.log(Object.prototype.__proto__)//null
function Fn(){
}
Fn.prototype.a ='xxx'
var fn1 = new Fn()
console.log(fn1.a.fn1)
var fn2 =new Fn()
fn2.a='yyy'
console.log(fn1.a,fn2.a,fn2)//设置属性值的时候不看原型链
function Person(name,age){//属性放在构造函数里初始化
this.name=name
this.age=age
}
Person.prototype.setName=function (name){
this.name=name
}
var p1=new Person('Tom',12)
p1.setName('Bob')
console.log(p1.__proto__===p2.pro)
console.log(p2)
/*
案例1
*/
function Foo(){ }
var f1 =new Foo();
console.log(f1 instanceof Foo);//true
console.log(f1 instanceof Object);//true
/*
案例2
*/
console.log(Object instanceof Function)//true
console.log(Object instanceof Object)//true
console.log(Function instanceof Function)//true
console.log(Function instanceof Object);//true
function Foo(){}
console.log(Object instanceof Foo);//false
``` javascript
/*
测试题1
*/
function A(){
}
A.prototype.n = 1
var b = new A()//实例能不能看到n,是通过new的隐式原型属性
A.prototype ={//更新属性本身,指向新的对象,b能不能看到n
n:2,
m:3
}
var c = new A()
console.log(b.n,b.m,c.n,c.m)/b.n
/*
测试题2
*/
var F =function(){}
Object.prototype.a =function(){
console.log('a()')
}
Function.prototype.b = function(){
console.log('b()')
}
var f = new F()
/*f.a()
f.b()
F.a()
F.b()*/
console.log(f)
console.log(Object.prototype)
```
``` javascript
输出undefined
var a = 3
function fn(){
//var a
console.log(a)
var a = 4
}
fn()
var b = 3
console.log(b)//undefined 变量提升
fn2()//可调用 函数提升
fn3()//不能 变量提升
var b = 3
function fn2(){
console.log('fn2()')
}
```
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。