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

加法以外的运算符,如减法,乘法,除法,都是把字符串转成数值进行运算。

 

posted @ 2017-03-18 17:56  cluod  阅读(187)  评论(0)    收藏  举报