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
复习方式:实践(代码写一次、跑一次、测试一次),不懂的地方谷歌,阅读和做笔记
底线原则:宁可重写一次,也不复制粘贴
本次复习内容有:注释、声明、常量、数据结构和类型
发表评论 | 暂无评论