JavaScript的基本语法、变量声明和数据类型

注释

// 单行注释
 
/* 
   这是一个多行注释 
   多行注释
 */

/* ··· /* 嵌套注释 */ ··· */

声明

三种声明:

  • var : 声明变量,可选择将其初始化为一个值。

  • let : 声明块范围局部变量(block scope local variable),可选择将其初始化为一个值。

  • const : 声明一个只读(read-only)命名常量。

变量

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

声明变量

三种方式声明变量:

  • var x = 42。这个语法可以同时用来声明局部和全局变量。

  • x = 42。这样就声明了一个全局变量并会导致JavaScript编译时产生一个严格警告。因而你应避免使用这种非常规格式。

  • let y = 42。这个语法可以用来声明语句块代码段的局部变量(block scope local variable)。

对变量求值

试图访问一个未初始化的变量会导致一个 ReferenceError 异常被抛出

var a;
console.log("The value of a is " + a); // logs "The value of a is undefined"
console.log("The value of b is " + b); // throws ReferenceError exception

可以使用undefined来确定变量是否已赋值

var input;
if(input === undefined){
  doThis();
} else {
  doThat();
}

undefined值在布尔类型环境中会被当作false

var myArray = new Array();
if (!myArray[0]) myFunction();

数值类型环境中undefined值会被转换为NaN(Not a Number)

var a;
a + 2; // Evaluates to NaN

对一个空变量求值时,空值null在数值类型环境中会被当作0来对待,而布尔类型环境中会被当作false

var n = null;
console.log(n * 32); // logs 0

变量的域

在所有函数之外声明的变量,叫做全局变量,因为它可被当前文档中的其他代码所访问。

在函数内部声明的变量,叫做局部变量,因为它只能在该函数内部访问。

if (true) {
  var x = 5;
}
console.log(x); // 5

使用 let 声明

if (true) {
  let y = 5;
}
console.log(y); // ReferenceError: y is not defined

变量声明提升

引用稍后声明的变量,而不会引发异常,称为变量声明提升(hoisting)

提升后的变量将返回 undefined 值

/**
 * Example 1
 */
console.log(x === undefined); // logs "true"
var x = 3;


/**
 * Example 2
 */
// will return a value of undefined
var myvar = "my value";

(function() {
  console.log(myvar); // undefined
  var myvar = "local value";
})();

也可以写作

/**
 * Example 1
 */
var x;
console.log(x === undefined); // logs "true"
x = 3;
 
/**
 * Example 2
 */
var myvar = "my value";
 
(function() {
  var myvar;
  console.log(myvar); // undefined
  myvar = "local value";
})();

建议:一个函数中所有的var语句应尽可能地放在接近函数顶部的地方,提升代码的清晰度

常量

常量标识符的命名规则和变量的相同:必须以字母、下划线或美元符号开头并可以包含有字母、数字或下划线。

使用关键字 const 创建,只读不可改

const prefix = '212';

常量不可以通过赋值改变其值,也不可以在脚本运行时重新声明。它必须被初始化为某个值

常量的作用域规则与 let 块级作用域变量相同

在同一作用域中,不能用与变量或函数同样的名字来命名常量

// THIS WILL CAUSE AN ERROR
function f() {};
const f = 5;

// THIS WILL CAUSE AN ERROR ALSO
function f() {
  const g = 5;
  var g;

  //statements
}

数据结构和类型

共7种

  • 六种是 原型 的数据类型:

    • Boolean. 布尔值,true 和 false.

    • null. 一个表明 null 值的特殊关键字,JavaScript 是大小写敏感的,因此 null 与 Null、NULL或其他变量完全不同。

    • undefined. 变量未定义时的属性。

    • Number. 表示数字,例如: 42 或者 3.14159。

    • String. 表示字符串,例如:"Howdy"

    • Symbol ( 在 ECMAScript 6 中新添加的类型).。一种数据类型,它的实例是唯一且不可改变的。

  • Object 对象

数据类型的转换

声明变量时可以不必指定数据类型,而数据类型会在脚本执行需要时自动转换

var answer = 42;

还可以给同一个变量分配一个字符串值

answer = "Thanks for all the fish...";

在涉及加法运算符(+)的数字和字符串表达式中,JavaScript 会把数字值转换为字符串

x = "The answer is " + 42 // "The answer is 42"
y = 42 + " is the answer" // "42 is the answer"

在涉及其它运算符,如 - ,JavaScript语言不会把数字变为字符

第一例是数学运算,第二例仍是字符串运算

"37" - 7 // 30
"37" + 7 // "377"

字符串转换为数字

parseInt()和parseFloat()

parseInt 仅能够返回整数,所以使用它会丢失小数部分,调用 parseInt 时最好总是带上进制(radix) 参数,这个参数用于指定使用哪一种数制

parseInt(string, radix);

下面例子都返回15

parseInt(" 0xF", 16);
parseInt(" F", 16);
parseInt("17", 8);
parseInt(021, 8);
parseInt("015", 10);
parseInt(15.99, 10);
parseInt("15,123", 10);
parseInt("FXX123", 16);
parseInt("1111", 2);
parseInt("15*3", 10);
parseInt("15e2", 10);
parseInt("15px", 10);
parseInt("12", 13);

下面例子都返回 NaN

parseInt("Hello", 8); // Not a number at all
parseInt("546", 2);   // Digits are not valid for binary representations

parseFloat()方法将参数中指定的字符串解析成为一个浮点数字并返回

parseFloat(string)

下面的例子都返回3.14

parseFloat("3.14");
parseFloat("314e-2");
parseFloat("0.0314E+2");
parseFloat("3.14more non-digit characters");

下面的例子返回NaN

parseFloat("FF2");
单目加法运算符
"1.1" + "1.1" = "1.11.1"
(+"1.1") + (+"1.1") = 2.2   // Note: the parentheses are added for clarity, not required.

阅读资料:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide

复习方式:实践(代码写一次、跑一次、测试一次),不懂的地方谷歌,阅读和做笔记

底线原则:宁可重写一次,也不复制粘贴

本次复习内容有:注释、声明、常量、数据结构和类型

竹杖芒鞋轻胜马,也无风雨也无晴。

添加评论

发表评论 | 暂无评论

该文章已经关闭评论

  • 一起走过的日子 - 刘德华
  • 情书 - 张学友
  • 后会无期 - G.E.M.邓紫棋
  • 清白之年 (Live) - 朴树
  • My Love (Radio Edit) - Westlife