JavaScript数据类型
变量提升:先获取变量再执行
标签:label
可以用于跳出代码块
foo: {
console.log(1);
break foo;
console.log('本行不会输出');
}
console.log(2);
// 1
// 2
typeof 运算符 确定变量类型
typeof window
typeof {}
typeof []
typeof null
以上都是Object类型
null表示一个空对象,转为数值为0
undefined是一个表示 此处无定义的原始值 转为数值为NaN
undefined,null,false,0,NaN,""或''都为false, 其他为true
NaN的数据类型依然属于Number,NaN不等于任何值,包括它本身
Infinity大于一切数值(除了NaN),-Infinity小于一切数值(除了NaN)
Infinity与NaN比较,总是返回false。
parselnt()用于将字符串转为整数
parseFloat()用于将一个字符串转为浮点数
isNaN()判断一个值是都为NaN
\0:null,\b:后退键 \f换页符 \n换行符 \t制表符 \v垂直制表符
'单引号 "双引号 \反斜杠
length属性返回字符串的长度
对象的引用
如果取消某一个变量对于原对象的引用,不会影响到另一个变量
var o1 = {};
var o2 = o1;
o1 = 1;
o2 // {}
这种引用只局限于对象,如果两个变量指向同一个原始的值,变量这时都是值的拷贝
var x=1;
var y=x;
x=2;
y//1
表达式还是语句
如果要解释为对象,最好在大括号前加上圆括号。 ({foo:123})
属性的读取
如果使用方括号运算符,键名必须放在引号里面,否则会被当作变量处理。
var foo = 'bar';
var obj = {
foo: 1,
bar: 2
};
obj.foo // 1
obj[foo] // 2
属性的删除delete
属性是否存在:in运算符
var obj = {};
if ('toString' in obj) {
console.log(obj.hasOwnProperty('toString')) // false
}
属性的遍历: for...in循环
with语句
操作同一个对象的多个属性时,提供一些书写的方便
// 例二
with (document.links[0]){
console.log(href);
console.log(title);
console.log(style);
}
// 等同于
console.log(document.links[0].href);
console.log(document.links[0].title);
console.log(document.links[0].style);
用临时变量代替with
// 可以写成
var temp = obj1.obj2.obj3;
console.log(temp.p1 + temp.p2);
函数执行时所在的作用域,是定义时的作用域,而不是调用时所在的作用域
函数参数不是必需的,JavaScript允许省略参数
传递方式
函数参数如果是原始类型的值,在函数体内修改参数值,不会影响到函数外部。
var p = 2;
function f(p) {
p = 3;
}
f(p);
p // 2
如果函数参数是复合类型的值(数组、对象、其他函数),传递方式是传址传递(pass by reference)
var obj = [1, 2, 3];
function f(o) {
o = [2, 3, 4];
}
f(obj);
obj // [1, 2, 3]
上面代码中,在函数f()内部,参数对象obj被整个替换成另一个值。这时不会影响到原始值。这是因为,形式参数(o)的值实际是参数obj的地址,重新对o赋值导致o指向另一个地址,保存在原地址上的值当然不受影响。
给对象赋值相当于开辟一个新的地址;
arguments对象
读取函数体内的参数
arguments对象的length属性, 可以判断调用时带几个参数
转换为数组
var args=Array.prototype.slice.call(arguments);
callee属性
arguments.callee返回它所对应的原函数
闭包: 读取其他函数内部变量的函数
立即调用的函数表达式(IIFE)
1.避免了污染全局变量, 2内部形成了一个单独的作用域
封装一些外部无法读取的变量
(function(){
var tmp=newData;
processData(tmp);
storeData(tmp);
})
数组: push, delete, in, forEach.for..in