js零碎笔记

1、在包含加法运算符的数字和字符串表达式中,JavaScript 会把数字值转换为字符串。在包含其它运算符(译注:如下面的“-”)时,JavaScript语言不会把数字变为字符。

console.log("this is a test" + 1);  //this is a test1
console.log("37"-7); //30

 

2、在JavaScript语言中,一个标识符必须以字母、下划线(_)或者美元($)符号开头;后续的字符可以包含数字(0-9)。因为JavaScript语言是区分大小写的,这里所指的字母可以是(大写的)“A”到字母“Z”和(小写的)“a”到“z”。

 

3、用var声明时未赋初值的变量,值会被设定为undefined。

在JavaScript中,undefined这个词有多重含义.首字母大写的Undefined表示的是一种数据类型,小写的undefined表示的是属于这种数据类型的唯一的一个值.但这两种undefined都只能存在于文档或规范中,不能 存在于JavaScript代码中.在JavaScript代码中,你看到的undefined最有可能是全局对象的一个属性,该属性的初始值是就是前面所说的原始值undefined,还有种情况就是,这个undefined是个局部变量,就像其他普通变量一样,没有任何特殊性,它的值不一定是undefined,但通常情况下都是的.下面我们所说的undefined,都指的是window.undefined这个属性.

在ES3中(Firefox4之前),window.undefined就是一个普通的属性,你完全可以把它的值改变成为任意的真值,但在ES5中((Firefox4之后),window.undefined成了一个不可写,不可配置的数据属性,它的值永远是undefin

 

var num ;
console.log(num);  //undefined

 

4、undefined值在布尔类型环境中会被当作false。undefined派生自null。

var num = undefined;
console.log(Boolean(num)); //false

 

5、数值类型环境中undefined值会被转换为NaN(译注:NaN为“Not a Number”,不是一个数字,的缩写)。

var num = NaN;
var num1 = 5;
console.log(num+num1);  //NaN

 

6、值 null 是一个 JavaScript 字面量,表示空值(null or an "empty" value),即没有对象被呈现(no object value is present)。空值null在数值类型环境中会被当作0来对待,而布尔类型环境中会被当作false。

var num1 = null;
var num2 = 5;
console.log(num1+num2);  //5
console.log(Boolean(num1));  //false

 

7、全局变量实际上是全局对象的属性(在浏览器下就是window对象的一个属性)

var name = "定海神针";
console.log(window.name);  //定海神针

 

8、在换行之前加上反斜线以转义换行(译注:实际上就是一条语句拆成多行书写),这样反斜线和换行都不会出现在字符串的值中。

var hello = "hello \
world \
!";
console.log(hello);  //hello world !

 

9、位运算符

  位运算符将它的操作数视为32位的二进制串(0和1组成)。例如:十进制数字9用二进制表示为1001,位运算符就是在这个二进制表示上执行运算,但是返回结果是标准的JavaScript数值。

 

10、in操作,如果指定的属性在指定的对象中会返回true

  语法:属性 in 对象

var myarray = new Array("1","2","3","4");
console.dir(myarray);

这是结果:一共有5个属性:

console.log("0" in myarray);  //true
console.log("5" in myarray);  //false 属性里没有5
console.log("length" in myarray);  //true

 

11、typeof和instanceof的目的都是检测变量的类型,两个的区别在于typeof一般是检测的是基本数据类型,instanceof主要检测的是引用类型。

 

12、逗号操作符(,)对两个操作数进行求值并返回第二个操作数的值。它的优先级别在所有运算符中是最低的,结合方向是“自左至右”的。 

var a = 30,b;
b = 30,20;
console.log(b);  //30

为什么是30而不是20,因为=优先级比,高,改为如下就符合我们的预期:

var a = 30,b;
b = (30,20);
console.log(b);  //20

 

13、null表示"没有对象",undefined表示"缺少值",就是此处应该有一个值,但是还没有定义。null主要在对象操作上用,undefined主要用在变量上。(此处待确认

 

14、我们使用一对花括号{}来分组语句块,如下所示:

{
   statement_1;
   statement_2;
   ...
   statement_n;
}

 

15、在ECMAScript 6标准之前,Javascript没有块作用域。如果你在块的外部声明了一个变量,然后在块中声明了一个相同变量名的变量,并赋予不同的值。那么在程序执行中将会使用块中的值。示例:

var a = 1;
{
    var a =2;
}
console.log(a); //2

这段代码的输出是2,这是因为var x=2的作用范围与var x=1的作用范围相同。

 

16、在if的条件语句中,传递给条件语句时,以下被认为是false:

  • false
  • undefined
  • null
  • 0
  • NaN
  • 空字符串 ("")

所有其他值,包括所有对象会被计算为 true 。注意:Boolean对象被认为是true,而字面量false则是false.

var x = new Boolean(false);
if (x) {
    console.log("true");  //true
}

if (!false) {
    console.log("false");  //false
}

 

17、你可以在一个函数里面嵌套另外一个函数。

  嵌套(内部)函数是容器(外部)函数的私有成员。它自身也形成了一个闭包。一个闭包是一个可以自己拥有独立的环境与变量的的表达式(通常是函数)。既然嵌套函数是一个闭包,就意味着一个嵌套函数可以继承容器函数的参数和变量。

  换句话说,内部函数包含外部函数的作用域。可以总结如下:

  • 内部函数只可以在外部函数中访问
  • 内部函数形成了一个闭包:它可以访问外部函数的参数和变量,但是外部函数却不能使用它的参数和变量

  关于闭包的一个资料:http://blog.csdn.net/yfgcq/article/details/2039477

  英文好可以看:http://jibbering.com/faq/notes/closures/

 

18、对象名首字母大写是非常普遍而且很恰当的惯用法。

 

19、一段代码,运行结果是什么?

var a = {n: 1};
a.x = a = {n: 2};
console.log(a.x);

运行结果是undefined,我是这么理解这个过程的:

var a = {n:1};
var b =a;
console.log( a === b); // true a和b是一个引用
// a.x = a = {n:2};
a = {n:2};
console.log ( a === b ); // false 这个a已经不是上一个a了,是一个新的地址,而b才是上一个a,a和b的指针不同了
a.x ; // 只是定义了一个属性,并没有赋值操作,因为a = {n:2}也是一个定义过程,当然a.x就是undefined
// a.x = a = {n:2};相当于var a.x,a={n:2}
console.log(a.x);

 待续。。。。

posted @ 2015-07-15 11:35  定海神针  阅读(131)  评论(0编辑  收藏  举报