Loading

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

posted @ 2020-04-28 17:53  火柴天堂  阅读(277)  评论(0)    收藏  举报