console.log();输出,可以直接输出变量,要输出字符串"xxx"
也可以用c的printf格式输出。不过,占位符的种类比较少,只支持字符(%s)、整数(%d或%i)、浮点数(%f)和对象(%o)四种。
目前就了解一点,觉得js是一个不要求变量类型的语法,应该和php类似,万物皆是var出来的,我是把它看成字符串型,然后需要的时候进行强转,然后判断==是弱等于,会把左右两边自动转化成同一类型进行比较,可以进行判断是否完全相等,使用===
函数的话就是 function aaa(bbb){}这个样子
有个输出的地方要注意 console.log输出变量显示问题
Object value at left was shapshotted when logged, value below was envalueated jast now
什么意思呢?就是说这个标记左边的值是代码运行到这句时变量的快照,而下面的值是你展开这个对象时才评估的值,这样的设计是为了防止代码运行过程中 log 语句进行 snapshot 占用大量资源拖慢代码运行。所以在这个标记后面两次都输出 bbb 是正确的。
作用域:var在函数里定义的才是局部变量。直接使用变量不声明则是隐式全局变量,函数里也是全局的
预解析:变量声明提升在函数声明上面。var a=b=c 相当于定义var a和两个隐式全局变量b、c
类存在堆里,对象的值存在堆上,引用地址放在栈里
基本包装类型:本身是基本类型,但是可以调用了类方法或者属性,就是基本包装类型(由变量->对象)。new一个普通类型就变成对象了。比如在判断true false的时候 。true&&对象->对象 对象&&true->ture
```
//1 调用构造函数创建对象
var obj=new Object();
//2. 自定义构造函数创建对象
//自定义构造函数
function Person(name,age) {
this.name=name;
this.age=age;
this.sayHi=function () {
console.log("您好,我叫:"+this.name);
};
}
//创建对象----实例化一个对象,并初始化
var per=new Person("小明",20);
per.name="张三";
//四件事:
/*
* 1. 开辟空间,存储创建的新的对象
* 2. 把this设置为当前的对象
* 3. 设置对象的属性和方法的值
* 4. 返回创建后新的对象
* */
3.字面量的方式
var obj2={
name:"小明",
age:20,
sayHi:function () {
console.log("我是:"+this.name);
}
};
```
作用域:var在函数里定义的才是局部变量。直接使用变量不声明则是隐式全局变量,函数里也是全局的
预解析:变量声明提升在函数声明上面。var a=b=c 相当于定义var a和两个隐式全局变量b、c
类存在堆里,对象的值存在堆上,引用地址放在栈里
实例对象的构造器(构造函数) 指向该构造函数(es5没有class概念)
person.construcor == Person
person._proto_.construcor = Person
实例对象的属性__proto__ 其实等于构造函数的prototype属性,这两个都是原型对象
//通过原型添加方法,解决数据共享,节省内存空间
Person.prototype.eat = function(){}
访问属性和方法的时候,先对象本身,然后去创建该对象的构造函数的原型里找