零基础学习JS--基础篇--语法和数据类型

注释

Javascript 注释的语法和 C++ 或许多其他语言类似:

// 单行注释

/* 这是一个更长的,
   多行注释
*/

变量

变量声明:

var:声明一个变量,可选初始化一个值,可以用来声明局部变量和全局变量。

let:声明一个块作用域的局部变量,可选初始化一个值。

const:声明一个块作用域的只读常量,常量不可以通过重新赋值改变其值,也不可以在代码运行时重新声明,它必须被初始化为某个值。

变量命名:JavaScript中,变量的命名必须以字母、下划线(_)或者美元符号($)开头;后续的字符也可以是数字(0-9)。

变量求值:

用 var 或 let 语句声明的变量,如果没有赋初始值,则其值为 undefined。

如果访问一个未声明的变量会导致抛出 ReferenceError 异常:

var a;
console.log("The value of a is " + a); // a 的值是 undefined

console.log("The value of c is " + c); // 未捕获的引用错误:c 未被定义

let x;
console.log("The value of x is " + x); // x 的值是 undefined

console.log("The value of y is " + y); // 未捕获的引用错误:y 未被定义
let y;

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

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

数值类型环境中 undefined 值会被转换为 NaN

var a;
a + 2; // 计算为 NaN

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

var n = null;
console.log(n * 32); // 在控制台中会显示 0
变量提升:

JavaScript 变量的另一个不同寻常的地方是,你可以先使用变量稍后再声明变量而不会引发异常。这一概念称为变量提升;JavaScript 变量感觉上是被“提升”或移到了函数或语句的最前面。但是,提升后的变量将返回 undefined 值。因此在使用或引用某个变量之后进行声明和初始化操作,这个被提升的变量仍将返回 undefined 值。

/**
 * 例子 1
 */
console.log(x === undefined); // true
var x = 3;

/**
 * 例子 2
 */
var x;
console.log(x === undefined); // true
x = 3;

数据结构和类型

数据类型:

七种基本数据类型:

  • 布尔值(Boolean),有 2 个值分别是:true 和 false
  • null,一个表明 null 值的特殊关键字。JavaScript 是大小写敏感的,因此 null 与 NullNULL或变体完全不同。
  • undefined,和 null 一样是一个特殊的关键字,undefined 表示变量未赋值时的属性。
  • 数字(Number),整数或浮点数,例如: 42 或者 3.14159
  • 任意精度的整数(BigInt),可以安全地存储和操作大整数,甚至可以超过数字的安全整数限制。
  • 字符串(String),字符串是一串表示文本值的字符序列,例如:"Howdy"
  • 代表(Symbol,在 ECMAScript 6 中新添加的类型)。一种实例是唯一且不可改变的数据类型。
  • 以及对象(Object)。
数据类型的转换:

JavaScript 是一种动态类型语言 。这意味着你在声明变量时可以不必指定数据类型,而数据类型会在代码执行时会根据需要自动转换。因此,你可以按照如下方式来定义变量:

var answer = 42;

然后,你还可以给同一个变量赋予一个字符串值,例如:

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

因为 JavaScript 是动态类型的,这种赋值方式并不会提示出错。

数字转换为字符串:

在包含的数字和字符串的表达式中使用加法运算符(+),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)参数,这个参数用于指定使用哪一种进制。

console.log(parseInt('123'));
// 123 (default base-10)
console.log(parseInt('123', 10));
// 123 (explicitly specify base-10)
console.log(parseInt('   123 '));
// 123 (whitespace is ignored)
console.log(parseInt('077'));
// 77 (leading zeros are ignored)
console.log(parseInt('1.9'));
// 1 (decimal part is truncated)
console.log(parseInt('ff', 16));
// 255 (lower-case hexadecimal)
console.log(parseInt('0xFF', 16));
// 255 (upper-case hexadecimal with "0x" prefix)
console.log(parseInt('xyz'));
// NaN (input can't be converted to an integer)

将字符串转换为数字的另一种方法是使用一元加法运算符

"1.1" + "1.1" = "1.11.1"
(+"1.1") + (+"1.1") = 2.2
// 注意:加入括号为清楚起见,不是必需的。

字面量

字面量是脚本中按字面意思给出的固定的值,而不是变量。

数组字面量:

数组字面值是一个封闭在方括号对 ([]) 中的包含有零个或多个表达式的列表,其中每个表达式代表数组的一个元素。当你使用数组字面值创建一个数组时,该数组将会以指定的值作为其元素进行初始化,而其长度被设定为元素的个数。

下面的示例用 3 个元素生成数组 coffees,它的长度是 3。

var coffees = ["French Roast", "Colombian", "Kona"];

var a = [3];

console.log(a.length); // 1

console.log(a[0]); // 3

数组字面值中的多余逗号:

你不必列举数组字面值中的所有元素。若你在同一行中连写两个逗号(,),数组中就会产生一个没有被指定的元素,其初始值是 undefined。以下示例创建了一个名为 fish 的数组:

var fish = ["Lion", , "Angel"];

在这个数组中,有两个已被赋值的元素,和一个空元素(fish[0] 是 "Lion",fish[1] 是 undefined,而 fish[2] 是 "Angel")。

在下面的例子中,数组的长度是 3,并不存在 myList[3] 这个元素。元素列表中其他所有的逗号都表示一个新元素(的开始)。

var myList = ["home", , "school"];

在下面的例子中,数组的长度是 4,元素 myList[0] 和 myList[2] 缺失。

var myList = [, "home", , "school"];

如果你在元素列表的尾部添加了一个逗号,它将会被忽略。再看一个例子。在这里,该数组的长度是 4,元素 myList[1] 和 myList[3] 被漏掉了。(但是)只有最后的那个逗号被忽略。

var myList = ["home", , "school", ,];

但是,在你自己写代码时:显式地将缺失的元素声明为 undefined,将大大提高你的代码的清晰度和可维护性

布尔字面量:

布尔类型有两种字面量:truefalse

数字字面量:

JavaScript 数字字面量包括多种基数的整数字面量和以 10 为基数的浮点数字面量。

整数字面量:

整数可以用十进制(基数为 10)、十六进制(基数为 16)、八进制(基数为 8)以及二进制(基数为 2)表示。

  • 十进制整数字面量由一串数字序列组成,且没有前缀 0。
  • 八进制的整数以 0(或 0O、0o)开头,只能包括数字 0-7。
  • 十六进制整数以 0x(或 0X)开头,可以包含数字(0-9)和字母 a~f 或 A~F。
  • 二进制整数以 0b(或 0B)开头,只能包含数字 0 和 1。

浮点数字面量:

浮点数字面值可以有以下的组成部分:

  • 一个十进制整数,可以带正负号(即前缀“+”或“-”),
  • 小数点(“.”),
  • 小数部分(由一串十进制数表示),
  • 指数部分。

指数部分以“e”或“E”开头,后面跟着一个整数,可以有正负号(即前缀“+”或“-”)。浮点数字面量至少有一位数字,而且必须带小数点或者“e”(大写“E”也可)。

简言之,其语法是:

[(+|-)][digits][.digits][(E|e)[(+|-)]digits]

//例如
3.1415926
.123456789
3.1E+12
.1e-23
对象字面量:

对象字面值是封闭在花括号对({})中的一个对象的零个或多个“属性名—值”对的(元素)列表。

以下是一个对象字面值的例子。对象car的第一个元素(译注:即一个属性/值对)定义了属性 myCar;第二个元素,属性 getCar,引用了一个函数调用(即 CarTypes("Honda"));第三个元素,属性 special,使用了一个已有的变量(即 Sales)。

var Sales = "Toyota";

function CarTypes(name) {
  return name === "Honda" ? name : "Sorry, we don't sell " + name + ".";
}

var car = { myCar: "Saturn", getCar: CarTypes("Honda"), special: Sales };

console.log(car.myCar); // Saturn
console.log(car.getCar); // Honda
console.log(car.special); // Toyota

更进一步的,你可以使用数字或字符串字面值作为属性的名字,或者在另一个字面值内嵌套上一个字面值。如下的示例中使用了这些可选项。

var car = { manyCars: { a: "Saab", b: "Jeep" }, 7: "Mazda" };

console.log(car.manyCars.b); // Jeep
console.log(car[7]); // Mazda

对象属性名字可以是任意字符串,包括空串。如果对象属性名字不是合法的 javascript 标识符,它必须用引号包裹。

const unusualPropertyNames = {
  '': '空字符串',
  '!': '砰!'
}
console.log(unusualPropertyNames.'');   // SyntaxError: Unexpected string
console.log(unusualPropertyNames.!);    // SyntaxError: Unexpected token !

属性的名字不合法,那么便不能用点(.)访问属性值,而是通过方括号表示法([])来访问。

console.log(unusualPropertyNames[""]); // 空字符串
console.log(unusualPropertyNames["!"]); // 砰!
RegExp字面量:

一个正则表达式是字符被斜线(译注:正斜杠“/”)围成的表达式。下面是一个正则表达式文字的一个例子。

var re = /ab+c/;
字符串字面量:

字符串字面量是由双引号(")对或单引号(')括起来的零个或多个字符。字符串被限定在同种引号之间;也即,必须是成对单引号或成对双引号。下面的例子都是字符串字面值:

'foo'
"bar"
'1234'
'one line \n another line'
"Joyo's cat"

你可以在字符串字面值上使用字符串对象的所有方法——JavaScript 会自动将字符串字面值转换为一个临时字符串对象,调用该方法,然后废弃掉那个临时的字符串对象。你也能用对字符串字面值使用类似 String.length 的属性:

console.log("John's cat".length);
// 将打印字符串中的字符个数(包括空格)
// 结果为:10

在字符串中使用的特殊字符:

作为一般字符的扩展,你可以在字符串中使用特殊字符,如下例所示,其实也就是转义字符:

"one line \n another line";

转义字符:

字符意思
\0Null 字节
\b退格符
\f换页符
\n换行符
\r回车符
\tTab (制表符)
\v垂直制表符
\'单引号
\"双引号
\\反斜杠字符(\)

通过在引号前加上反斜线 '\',可以在字符串中插入引号,这就是引号转义。例如:

var quote = "He read \"The Cremation of Sam McGee\" by R.W. Service.";
console.log(quote);

代码的运行结果为:

He read "The Cremation of Sam McGee" by R.W. Service.

要在字符串中插入'\'字面值,必须转义反斜线。例如,要把文件路径 c:\temp 赋值给一个字符串,可以采用如下方式:

var home = "c:\\temp";

附:以上内容均为个人在MDN网站上学习JS的笔记,若有侵权,将在第一时间删除,若有错误,将在第一时间修改。

  • 39
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值