js零碎笔记

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

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

 

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

 

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

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

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

 

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

 

四、undefined值在布尔类型环境中会被看成false。undefined派生自null。.net

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

 

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

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

 

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

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

 

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

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

 

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

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

 

九、位运算符

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

 

十、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

 

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

 

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

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

为何是30而不是20,由于=优先级比,高,改成以下就符合咱们的预期:

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

 

1三、null表示"没有对象",undefined表示"缺乏值",就是此处应该有一个值,可是尚未定义。null主要在对象操做上用,undefined主要用在变量上。(此处待确认

 

1四、咱们使用一对花括号{}来分组语句块,以下所示:

{
   statement_1;
   statement_2;
   ...
   statement_n;
}

 

1五、在ECMAScript 6标准以前,Javascript没有块做用域。若是你在块的外部声明了一个变量,而后在块中声明了一个相同变量名的变量,并赋予不一样的值。那么在程序执行中将会使用块中的值。示例:

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

这段代码的输出是2,这是由于var x=2的做用范围与var x=1的做用范围相同。

 

1六、在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
}

 

1七、你能够在一个函数里面嵌套另一个函数。

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

  换句话说,内部函数包含外部函数的做用域。能够总结以下:

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

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

  英文好能够看:http://jibbering.com/faq/notes/closures/

 

1八、对象名首字母大写是很是广泛并且很恰当的惯用法。

 

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

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);

 待续。。。。

相关文章
相关标签/搜索