以下内容是书籍You don’t know JS yet(中文名:你所不知道的JavaScript,第二版)的第二章Surveying JS 的内容整理,该章节的目的是对于JS语变量的指针其含义是指该变量的言的各个方面进行概述,为后续深入学习JS的特性奠定基础。有经验的JS开变量英文发者可以通过以下内容对JS的总体概况进行复习。

1. 每个文件都是一个单独的程变量与函数序 (Each file is a prog索引失效的几种情况和解决ram)

在web应用中我们使用的是多个J变量名S文件,虽然它们给我们的感觉是一整个程序,但对于JavaScript来说它们是不同的文件,这些单独的程序之间通过合作来让你觉得它们是一体的,这种合作有两种方式:

  1. 通过全局作用域(globa变量l scope),各程序之间分享自己的状态,在运行时看起来就如同一个整体
  2. javascript百炼成仙txt过ES6的新特性模块(module)

2. 值javascript百炼成仙txt (javaeeValues)

值被程序用来记录状态。

JS中的值有两种数据类java语言型,基本java面试题类型 (primitive)对象javascript (object)

2.1 基本类型 (primitive)

值通过字面量 (literals) 表示

"This is a literal"

在上面的代码中,”This is a literal” 就是一个基本类型字符串的字面量。

JS中的字符串既可以用双引号括起来也可以用单引号,用哪一种取决于你的习惯,只要在程序中保持前后一致性就好。

除了使用单双引号,反引号 (back-tick) 同样可以用来表示字符串,这是一种模板字符串

const firstName = John
console.log(`My name is ${ firstName }`)
// My name is John

模板字符串可以读取 (resolve) 变量表达式,将其值插入 (interpoljava培训ation) 到字符串中。java怎么读如果没有要在字符串中读取变量,则不要使用模板字符串,否则会引起困惑。

布尔值 (Boolean) 包括true和false两种情况,常被用于循环和判断语句作为判定条件。

数值 (Numbers) 经常被用来计算循环的次数和索引数组数组和链表的区别如果要处理更大的数字,可以使用bigint数据类型。

nullundefined都表示空值,但最佳实践是只用undefined来表示空值

符号 (symbol) 也是一种基本类型,但一般用于底层的库和框架编写,日常的编程基本不会使用。数组公式

2.2 数组(array)和对象(object)

数组实际上是一种特殊的对象,索引图是一组有序的通过数值索引的数据。

var arr = [ 1, 2, 3 ]
arr[0]   // 1
arr[1]   // 2

对象是一组无序的,由键 (key) 索引的值的集合。

var staff = {
    name: "John",
    age: 27
}
staff.name  // "John"

2.3 查看变量类型

typeof 42; //"number"
typeof "abc"; // "string"
typeof true; // "boolean"
typeof undefined // "undefined"
typeof null // "object"  --不是null
typeof { "a" : 1 } // "object"
typeof [1,2,3] // "object"  --不是array
typeof function hello(){} // "function"

要注意的是null的数变量名的命名规则据类型是objectjavascript什么意思undefined就是undefinjavaeeed。数组的类型也是object。 而函数虽然也是一种特殊的对象,但其数据类型被标识为function

3. 声明(declarejava编译器)和使用变量

varlet关键字都可以用来声变量4明变量,但var声明的变量的作用域是所在的函数(function scope) ,而let声明的变量作用域是所在的代码块(block scope)

if (true) {
    var name = "Master";
    let age = 39;
}
console.log(name)
// "Master"
console.log(age)
// 会报错!

const关键字可以用来java环境变量配置变量与函数明一个常量,最常见的用法是用来给某个值赋予有意义的名字,从而提高程序可读性和减少冗余。

constjavascript百炼成仙声明的变量并不索引超出了数组界限什么意思是“不能改变(unchangeable)”的,它们只索引图是不能被重新赋值(re-索引assigned)。所以我们最好避免用const声明一个对象java培训(包括数组),否则会引起困惑。

const names = ['John', 'Smith']
names[2] = 'Tom'  //可以运行
names = []        //报错

functioncatch关键字实际上也声明了变量。

function hello(name){   // 这里声明了一个全局变量-函数hello, 以及一个函数内的本地变量-name
    console.log(`Hello, ${ name }`)
}
try{
    someError()
}
catch (err) {          // 声明了本地变量err
    console.log(err)
}

4. 函数(Functions)

JS中的函数是流程 (procedure) 的集合

4.1 函数声明 (Function djavascript百炼成仙eclaration)

function declaredFunction(){
    return someThing;
}

上述代码是一个函数声明,因为其自成一个语句 (stateme变量的指针其含义是指该变量的nt) ,而不是作为语句中的一个表达式。函数值和其标javascript百炼成仙识符declaredFunctiojavascript downloadn之间的联系是在程序编译javascript怎么读段就建立数组去重的。

4.2 函数表达式 (Function expression)

var functionExpression = function() {
    return someThing
}

上面的函数是一个表达式,其值被赋给了变量functionExpr索引类型ession。变量和函数值之间的联系是在程序运行时才建立的。

4.3 作为对象的值

var whatToSay = {
    greeting() {
        console.log("Hello!")
    },
    question() {
        console.log("What's your name?")
    },
    answer() {
        console.log('My name is Kyle')
    }
}
whatToSay.greeting()
// Hello!

因为函数也是一种变量,所以它们可以作为对象的一个属性,随后我们可以通过 . 操作符来调用这些函数,就像获取对象的属性一样。

5. 比较运算符 (Comparisons)

1. ===

这个运算符会同时比较值和数据类型,只有两者都匹配才会返回true。虽然”==java语言=”在大部分情况下都非常可靠,但有时候它也会骗人。

NaN === NaN;          //false
0 === -0;             //true

注意:-0是一变量值个JS中存在的一个特殊的值,如果在控制台输入-0,JS会直接给你返回-0.

>>> -0
< -0
>>> 0
< 0

对于NaN索引的作用,我们可以使用Number.isNaN(..) 函数来进行判断。

对于-0,我们javascript可以使用Object.is(..) 来进行java面试题准确的判断。NaN也可以用这个函数来进行准确比较。

当我们比较对象值的时候,”===”也会有一些奇java编译器怪的结果:javascript

[ 1, 2, 3 ] === [ 1, 2, 3 ];  //false
var x = [ 1, 2, 3];
var y = x;
y === x;   //true
x === [ 1, 2, 3 ]   //false
y === [ 1, 2, 3 ]   //false

我们很自然地索引图会认为JS进行比较时会对值javascript百炼成仙免费阅读的内容变量值进行比较,这叫做结构性相等(structural equality) ,但JS进行判断是基于引用相等(reference equality) 。在JS中,所有的对象值都是作为引用(reference) 出现的,所以只有当两个对象引用的完变量的定义全是同一个索引符号和详图符号对象变量的定义时,才会认为它们相等。

之所以不提供结构性相等的比较,是因为有很多的特javascript是干什么的殊情况难以全面顾及(参考对象的深拷贝)。

2. ==

“==” 在比较之前会数组指针进行强制类型转换(coercion) ,把等号两边的值都转换为同一种变量值数据类型,然后再进行比较。 “==”和”===“的唯一区别就是是否进行强制类型转换

“==”偏爱数值型,也就是说当两边的数据类型不一致时,它会把两边的值转换为数字再进行比较。而如果两边的数据类型相同,那么它的表现和”===”是完全相同的。

42 == "42"   // true
"1" == true  // true  字符串"1"对应的数字是1,true对应的数字也是1
"0" == false // true
"" == 0      // true

JS中的另外几个比较符的原理和”==”类似,如果发现两边的数据类型不一致,都会先转换为数字,再进行比较。如javascript百炼成仙果一致,比如说都是字符串,就会按照字符数组词串比较的规则进行大小比较。数组c语言

"10" < "9"  // true
10 < "9"    // false