JavaScript 标准参考教程--基本语法 学习笔记

来自《JavaScript 标准参考教程(alpha)》,by 阮一峰

***********************************************************************************************************************************

变量提升

变量提升只对var命令声明的变量有效,如果一个变量不是用var命令声明的,就不会发生变量提升。

console.log(b);
b = 1;

上面的语句将会报错,提示“ReferenceError: b is not defined”,即变量b未声明,这是因为b不是用var命令声明的,JavaScript引擎不会将其提升,而只是视为对顶层对象的b属性的赋值。

变量名

中文是合法的标识符,可以用作变量名。

注释

由于历史上JavaScript兼容HTML代码的注释,所以<!--和-->也被视为单行注释。需要注意的是,-->只有在行首,才会被当成单行注释,否则就是一个运算符。如

x = 1; <!-- x = 2;
--> x = 3;


switch

switch语句后面的表达式与case语句后面的表示式,在比较运行结果时,采用的是严格相等运算符(===),而不是相等运算符(==),这意味着比较时不会发生类型转换。switch结构不利于代码重用,往往可以用对象形式重写。

var o = {
    banana: function (){ return },
    apple: function (){ return },
    default: function (){ return }
};

if (o[fruit]){
    o[fruit]();
} else {
    o['default']();
}

标签

JavaScript语言允许,语句的前面有标签(label)。标签通常与break语句和continue语句配合使用,跳出特定的循环。

数据类型

JavaScript语言的每一个值,都属于某一种数据类型。JavaScript的数据类型,共有六种。(ES6又新增了第七种Symbol类型的值)。

JavaScript判断值类型的三个方法。
  • typeof运算符
  • instanceof运算符
  • Object.prototype.toString方法
typeof 123 // "number"
typeof "123" // "string"
typeof false // "boolean"
typeof(function f(){})// "function"
typeof undefined// "undefined"
typeof window // "object"
typeof {} // "object"
typeof [] // "object"
typeof null // "object"
<div class="highlight"><pre><code class="language-javascript" data-lang="javascript"><span class="kd">var</span> <span class="nx">o</span> <span class="o">=</span> <span class="p">{};</span>
<span class="kd">var</span> <span class="nx">a</span> <span class="o">=</span> <span class="p">[];</span>
<span class="nx">o</span> <span class="k">instanceof</span> <span class="nb">Array</span> <span class="c1">// false</span>
<span class="nx">a</span> <span class="k">instanceof</span> <span class="nb">Array</span> <span class="c1">// true</span></code>
 

null和undefined的区别

 nullundefined
意义表示空值,即该处的值现在为空,表示"无"的对象表示不存在值,就是此处目前不存在任何值,表示"无"的原始值
作为函数的参数,表示该函数的参数是一个没有任何内容的对象变量被声明了,但没有赋值时,就等于undefined
 作为对象原型链的终点调用函数时,应该提供的参数没有提供,该参数等于undefined
  对象没有赋值的属性,该属性的值为undefined
 函数没有返回值时,默认返回undefined
数值0NaN
booleanfalsefalse
对比null==false //truenull==false //true

boolean转换

undefined,null,NaN,false,0,""   -> false

[],{}  -> true

结尾的分号

do...while循环,函数表达式是有分号的。

分号的自动添加
JavaScript引擎的特点,在应该写分号却没写的情况下,它会自动添加(Automatic Semicolon Insertion,简称ASI),这种自动添加不是绝对的。

自动添加分号

不自动添加分号
下一行的开始与本行的结尾,无法放在一起解释下一行的开始可以与本行的结尾可以连在一起解释
一行的起首是“自增”(++)或“自减”(--)运算符,则它们的前面会自动添加分号起首的是(、 [ 、+、-、/这五个字符中的一个
如果continue、break、return和throw这四个语句后面,直接跟换行符 

未书写分号所产生的错误实例

var a = b + c
(d+e).toString();
/* 结果报错,因为两行连在一起,
   解释为c(d+e),
   即对函数 c 的调用 */
a = b
/hi/g.exec(c).map(d);
/* 解释为 a = b / hi / g.exec(c).map(d),
   即把正则表达式的斜杠当作除法运算符 */ 
var a = "b"
[ "red", "green" ].forEach(function(c) { console.log(c) })
/* 结果报错,因为两行连在一起,
 解释为"b"["red", "green"],
 即把字符串当作一个数组,按索引取值 */ 
var a = 0;
var f = function(x) { return x }
(a++)
/* f等于0,因为(a++)被
 * 视为匿名函数的调用 */
return a +
b;
return (a
+ b)
obj.foo(arg1,
arg2)
有些JavaScript代码压缩器不会自动添加分号,因此遇到没有分号的结尾,就会让代码保持原状,而不是压缩成一行


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值