javascript权威指南学习杂记(1210)

来源:互联网 发布:吉林网络 编辑:程序博客网 时间:2024/06/05 01:08

#趁着还有时间,重新学习和巩固Javascript,为未来做好准备,学习-思考-笔记#

疑问1:字符串string是原始值类型,为何却有属性呢?比如length属性,不是对象才有属性的吗?

其实string在用属性时,通过包装对象new String(s)临时转换为对象,因此就继承了字符串的方法,只是这是一个临时的转换,引用结束之后立马销毁。打比方:

var s=“test”;

console.log(s.length);//会立马销毁掉

s.len=10;//给s一个属性,尝试能不能运用

var t=s.len;

console.log(t);//undefined,说明字符串的属性只能是只读的,不能改写,另外数字和布尔值也是一样

疑问2:console.log([]==![])//结果输出true,不信你试一试

[]是空数组,数组是特殊的对象,这涉及到对象到数字的转换过程。空数组首先转换为空字符串,空字符串再转换为数字0,因此!0还是0,所以[]==![]。

笔记1(p59):对象的比较并不是值得比较:即使两个对象包含同样的属性以及同样的值,他们也是不相等的。各个索引元素完全相等的两个数组也不相等。

var o={x:1},p={x:1};//o!=p

var a=[1,2],b=[1,2];//a!=b

笔记2(p62):==判断相等时并做了类型转换,===不会做任何的类型转换
笔记3(p69):声明提前-》Javascript的函数作用域是指函数内部声明的所有变量在函数体内始终可见。有意思的是,这意味着在变量在声明前就已经可用了,这就是声明提前。

var scope="global";

function f(){

console.log(scope);//输出undefined,而不是global

var scope="local";//变量虽然是在这里声明,但是在整个函数体内都是可见的

console.log(scope);//输出local

}

以上的函数可以等同于一下的写法:

function f(){

var scope;//声明提前

console.log(scope);

scope="local";

console.log(scope);

}


0 0