JavaScript小知识点总结:语法
1.var a = 1+3;其中1+3成为表达式。语句与表达式的区别:语句主要进行了某种操作,而表达式一定返回了一个值。
2.语句以分号结束,一个分号结束一个语句。;;;表示三条空语句,一行可以写多条语句。
3.表达式不需要分号结尾,表达式如果加上分号,会被JavaScript引擎视为语句。且是无意义的语句。如:1+3; 'abc';
4.var x=1;var x 声明2次变量x,第二次的变量无效,x的值任然为1。但是如果第二次声明的变量有值,如var x = 2;则会覆盖第一次声明的值。
5.中文是合法的标识符,可以用作为变量名。var 临时变量 = 2;
6.JavaScript兼容HTML代码的注释,所以 <!-- -->也被视为单行注释。需要注意的是 -->只有被放在行首,才会被当成单行注释,否则就是一个运算符。
7.JavaScript基本数据类型:number、string、boolean、null、undefined、对象。其中对象又可以分成三个子类型。狭义的对象(objetc),数组(array),函数(function)。
8.typeof undefined返回undefined,typeof null返回object。typeof {}返回object,typeof []返回object.typeof window返回object。
9.5+null返回5,5+undefined返回NaN。
10.返回undefined的场景:第一种:var i;第二种:调用某个函数时没有传参数function f(x){return x};f();第三种:对象下的某个不存在属性:var o=new Object();console.log(o.p);第四种:函数无返回值,默认返回undefined:function f(){};f();
11.boolean:以下六种皆视为false(undefined、null、false、0、NaN、空字符串''或者""),空数组和空对象对应的boolean为true。
12.JavaScript内部,所有数字都是以64位浮点数形式存储,整数也是,所以1和1.0是相同的。
13.浮点数不是精确的值,所以涉及小数的运算需小心。0.1+0.2 == 0.3=>false; (0.3-0.2) == (0.2-0.1)=>false.
14.JavaScript浮点数组成:第一位符号位,0表示整数1表示负数。第2到12位存储指数部分,第13位到64位存储小数部分,即有效数字.
15.JavaScript内部有2个零,一个+0.一个-0;两者等价。(-0).toString =>'0';(+0).toString =>'0';唯一区别的场景是在作为分母时,返回的值不等。(1/+0) === (1/-0)=>false;除以正零得到+Infinity,除以负零得到-Infinity
16.NaN ===NaN=>false.NaN不等于自身。NaN与任何数计算,得到的都是NaN.
17.isNaN方法检测是否为NaN.对于数组和对象,isNaN返回的是true.但是对于空数组和只有一个数值成员的数组,则返回false。isNaN("hello")相当于isNaN(Number("hello")).
18. 0/0 =>NaN,非零数字除以0都返回Infinity。
19.Infinity与NaN相比总是返回false。
20.0乘以Infinity返回NaN,0除以Infinity返回0。Infinity与null运算时,null会被转换成0来计算。Infinity与undefined运算时,返回的都是NaN.
21.parstInt()方法是将字符串转换成数字,参数如果有空格,空格自动会被去除,不是字符串,会先转换成字符串再转换。该方法字符串转换成整数时是一个一个字符进行转换,遇到不能转成数字的字符就不再进行了,返回已转好的部分。如果参数第一个字符不能转换为数字时(数字正负号除外),会返回NaN。parstInt()方法的第二个参数,表示被解析的值得进制。默认是十进制转十进制。
22.parseFloat()方法时将字符串转换成浮点数
23.如果不同的变量指向同一个对象,那么他们这是这个对象的引用,也就是说指向同一个内存地址,修改其中一个变量。会影响其他所有变量:
var o1 = {};
var o2 = o1;
o1.a = 1;则o2.a也是1.
o2.b = 2;则o1.b也是2。
24.查看对象的所有属性可以用keys方法:
var o = {
key1:1,
key2:2
}
Object.keys(o);
25.delete删除对象的属性,删除成功返回true。delete无法删除继承的属性。也无法删除通过var 声明的变量。
26.in运算符用来检查对象是否包含某个属性(不能识别对象继承的属性)。检查的是键名,不是键值。如:
var o ={
p:1
}
'p' in o返回true。
27.for...in遍历对象所有属性。
28.with用来操作同一个对象的对个属性
var o = {}
with(o){
x= 'abc'
}
o.x=>undifined x = 'abc'
对象中如果没有x属性,with区块内部的操作等于创造出一个全局变量x,正确的写法是:
var o = {}
o.x = 1
with(o){
x= 2;
}
o.x=>2
29.任何类型的数据都可以放到数组里面,比如方法,对象。Object.keys方法返回数组的键名,也就是下标。
30.类似数组对象:具有length属性,length属性不是动态值,不随成员的变化而变化。
var obj = {
0: 'a',
1: 'b',
2: 'c',
length: 3
};
典型的类似数组对象有函数的argumrnts对象,大多数Dom集,还有字符串。
31.in运算符适用于对象,也适用于数组。
var arr = [ 'a', 'b', 'c' ];
2 in arr // true
'2' in arr // true
4 in arr // false
32.name属性返回function关键字后面的函数名。
33.length属性返回函数预期传入的参数个数。
34.函数的toString方法返回函数的源码,也包括里面的注释。
35.函数本身也是一个值,有自己的作用域,他的作用域与变量一样,是其声明时所在的作用域,与其运行时所在的作用域无关。
36.函数参数如果是原始类型的值(数值,字符串,布尔值),那么传递方式是传值传递,这意味着在函数体内修改参数值,不会影响到函数外部。
var p = 2;
function f(p) {
p = 3;
}
f(p);
p // 2
但是参数如果是复合型的值(对象,数组,其他函数),传递方式是传址传递,函数内部修改参数,会影响到原始值。
var obj = {p: 1};
function f(o) {
o.p = 2;
}
f(obj);
obj.p // 2
如果函数内部修改的,不是参数对象的某个属性,而是替换掉整个参数,这时不会影响到原始值。
var obj = [1, 2, 3];
function f(o){
o = [2, 3, 4];
}
f(obj);
obj // [1, 2, 3]
37.如果出现同名参数,则会取最后面的那个值。
function f1(a,a){
console.log(a)
}
f1(1,2) //2
f1(1) // undefined 第二个参数未定义。如果想获得第一个参数的值,可以用arguments对象。
38.arguments对象不仅可以读取参数,还可以为参数赋值(严格模式不可以这么写)。arguments很像数组,但他是个对象。
39.arguments对象带有一个callee属性。返回它所对应的原函数。
40.eval语句,就是把字符串当做语句执行。eval("var i= 1").
41.true + true =>2
1+ true =>2
'1' + [1] =>11
'1' + {foo:'bar'} =>1[object object]
'1'+true =>1true;
加法运算符会将其他类型的值自动转换成字符串再运算
[1,2]+3 => 1,23
加法以外的运算符,如减法,乘法,除法,都是把字符串转成数值进行运算。

浙公网安备 33010602011771号