JavaScript的基本概念20190725

一、JavaScript的基本概念:

1、JavaScript 是一种多范式的动态语言,它包含类型、运算符、标准内置( built-in)对象和方法
2、JavaScript 通过原型链而不是类来支持面向对象编程
3、JavaScript同样支持函数编程-因为它们也是对象,函数也可以被保存在变量中,并且像其他对象一样被传递。


二、引入JS代码

1、JavaScript代码可以放到一个单独的文件中,然后用src属性添加到HTML文件中:<script src="./main.js"></script>
2、还可以是一个完整的URL地址,例如:
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.2.0/lodash.js"></script>
3、附加多个脚本,使用多个标签:
<script src="/js/script1.js"></script>
<script src="/js/script2.js"></script>

4、如果设置了src属性,<script>标签内包裹的内容就会被忽略。所以,必须选择要么用src属性引入外部js文件,要么就使用<script>标签包裹住代码。


三、代码结构

1、语句
语句是执行操作的语法结构和命令
。可以在代码中编辑任意数量的语句,语句之间使用分号分割。通常,每条语句在单独的一行书写,这会提高代码的可读性。
2、分号
多数情况下,当一个分行符存在时,分号是可以省略的。但是建议加上分号
3、注释
单行注释: 以两个正斜杠字符//开始
多行注释: 以/*开始以*/结束。快捷键(选择代码后 按Ctrl+Shift+/
注释对生产没有任何负面影响!
4、use strict严格模式
4.1、当use strict处于脚本文件顶部时,则整个文件都将以严格模式进行工作。
4.2、use strict可以放在函数(大多数函数)而不是整个脚本的开头,那么严格模式仅在该函数中启用。
4.3、确保use strict出现在脚本的最顶部,否则严格模式无法启用,只有注释可以出现在use strict的上面。
4.4、没有办法取消use strict
4.5、建议按一个个函数去开启严格模式
4.6、设立use strict的目的:

  • 消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为;
  • 消除代码运行的一些不安全之处,保证代码运行的安全;
  • 提高编译器效率,增加运行速度;
  • 为未来新版本的Javascript做好铺垫。

5、变量
变量是数据的“命名存储”,用来保存一些信息。
在JavaScript中创建一个变量,需要用到let关键字。
下面的语句创建(换句话说,声明或者定义)了一个名称为“message”的变量:

let message;

现在,通过赋值操作符 =为变量添加一些数据:

let message;
message = 'Hello'; // 保存字符串

简洁一点,将变量定义和赋值组合在一起:

let message = 'Hello!'; // 定义变量,并且赋值

也可以在一行中声明多个变量:

let user = 'John', age = 25, message = 'Hello';

可以把变量想象为一个数据盒子,盒子上有一个唯一的标注盒子名字的贴纸。我们可以在盒子内放入任何值,同样,我们也可以改变它,值可以根据需要多次改变:

let message;
message = 'Hello!';
message = 'World!'; // 值改变了
alert(message);

当值改变的时候,先前的数据就从变量中删除了。
还可以声明两个变量,然后将其中一个变量的数据拷贝进另一个变量。

let hello = 'Hello world!';
let message;
// 将字符串 'Hello world' 从变量 hello 拷贝进 message
message = hello;
// 现在两个变量保存着相同的数据
alert(hello); // Hello world!
alert(message); // Hello world!

5.1、变量命名

  • JavaScript 的变量命名有两个限制:
    变量名称必须仅包含字母,数字,符号 $ 和 _。
    首字符必须非数字。

    如果命名包括多个单词,每个单词以大写字母开头,如:myVeryLongName
  • 命名区分大小
    命名为 appleAppLE 的变量是不同的两个变量。
  • 命名可以使用非英文字母,比如中文,但不推荐。
  • 保留字,有一张保留字列表无法用作变量命名,因为它们被语言本身采用了。
    比如,单词 letclassreturnfunction 被保留。
  • 一个变量名应该有一个清晰、明显的含义,描述了它存储的数据。

6、常量
声明一个常数(不变)变量,可以使用 const 而非let

const myBirthday = '18.04.1982';

使用 const 声明的变量称为“常量”。它们不能被修改,尝试这样做就会造成错误:

const myBirthday = '18.04.1982';
myBirthday = '01.01.2001'; // 错误,不能对常量重新赋值

能确定这个变量永远不会改变的时候,就可以使用 const 来确保这种行为,并且清楚地向别人传递这一事实。


四、数据类型

JavaScript 中有七种基本数据类型
1、Number类型 (数字)

  • number 类型用于整数和浮点数。
  • 除了常规的数字,还包括“特殊数值”也属于这种类型:Infinity-InfinityNaN
  • Infinity 代表数学概念中的无穷大∞。是一个比任何数字都大的特殊值。我们可以通过除以 0 来得到它。
alert( 1 / 0 ); // Infinity

或者在代码中直接提及它:

alert( Infinity ); // Infinity

NaN代表一个计算错误。它是一个不对的或者一个未定义的数学操作所得到的结果,比如:

alert( "not a number" / 2 ); // NaN, 这样的除法是错误的



2、String类型 (字符串)

  • JavaScript 中的字符串必须被包含在引号里面。
  • 在 JavaScript 中,有三种包含字符串的方式。
    双引号: ""
    单引号: ''
    反引号: ``
  • 双引号和单引号都是“简单”引用,在 JavaScript 中两者并没有什么差别。
  • 反引号是功能扩展的引用,允许通过${…},将变量和表达式嵌入到字符串中。例如:
let name = "John";
// 嵌入一个变量
alert( `Hello, ${name}!` ); // Hello, John!
// 嵌入一个表达式
alert( `the result is ${1 + 2}` ); // the result is 3
  • ${…} 内的表达式会被计算,结果成为字符串的一部分。可以在 ${…}内放置任何东西:诸如 name 的变量,或者诸如 1 + 2 的算数表达式,或者其他一些更复杂的。
    需要注意的是,这仅仅在反引号内有效,其他引号不允许这种嵌入。
alert( "the result is ${1 + 2}" ); // the result is ${1 + 2} (双引号什么也不做)
  • 转义字符\可以转义很多字符,比如\n表示换行,\t表示制表符,字符\本身也要转义,所以\\表示的字符就是\
  • ``也可以用来包含多行字符串,如:
`这是一个
多行
字符串`;
  • 操作字符串
    字符串常见的操作如下:
var s = 'Hello, world!';
s.length; // 13

要获取字符串某个指定位置的字符,使用类似Array的下标操作,索引号从0开始:

var s = 'Hello, world!';
s[0]; // 'H'
s[6]; // ' '
s[7]; // 'w'
s[12]; // '!'
s[13]; // undefined 超出范围的索引不会报错,但一律返回undefined

需要特别注意的是,字符串是不可变的,如果对字符串的某个索引赋值,不会有任何错误,但是,也没有任何效果

  • toUpperCase
    toUpperCase()把一个字符串全部变为大写:
var s = 'Hello';
s.toUpperCase(); // 返回'HELLO'
  • toLowerCase
    toLowerCase()把一个字符串全部变为小写:
var s = 'Hello';
var lower = s.toLowerCase(); // 返回'hello'并赋值给变量lower
lower; // 'hello'
  • indexOf
    indexOf()会搜索指定字符串出现的位置:
var s = 'hello, world';
s.indexOf('world'); // 返回7
s.indexOf('World'); // 没有找到指定的子串,返回-1
  • substring
    substring()返回指定索引区间的子串:
var s = 'hello, world'
s.substring(0, 5); // 从索引0开始到5(不包括5),返回'hello'
s.substring(7); // 从索引7开始到结束,返回'world'

3、boolean类型(布尔)

  • boolean 类型只有两个值:truefalse
  • 这种类型通常用于存储表示 yes 或 no 的值:true意味着 “yes,正确”,false 意味着 “no,不正确”。
let nameFieldChecked = true; // yes, name field is checked
let ageFieldChecked = false; // no, age field is not checked
  • 布尔值也可作为比较的结果:
let isGreater = 4 > 1;
alert( isGreater ); // true (比较的结果是 "yes")

4、null (空)
特殊的 null 值不属于上述任何一种类型。
它构成一个独立的类型,只包含 null值:

let age = null;

相比较于其他语言,JavaScript 中的 null 不是一个“对不存在对象的引用”或者“null 指针”。
仅仅是一个含义为“无”、“空”或“值未知”的特殊值。
上面的代码表示,由于某些原因,age 是未知的。


5、undefined(未定义)
特殊值undefined和 null 一样,自成类型。
undefined 的含义是 未被赋值。
如果变量被声明,而未被赋值,那么它的值就是 undefined

let x;
alert(x); // 弹出 "undefined"

原理上来说,可以为任何变量赋值为 undefined:

let x = 123;
x = undefined;
alert(x); // "undefined"

但不建议这样做。通常,使用 null将一个“空”或者“未知”的值写入变量中,undefined 仅仅用于检验,以查看变量是否被赋值或者其他类似的操作。


6、object类型(对象)
各种值组成的集合
arrayfunction是对象的一种
语法: 以花括号({)开头,以花括号结尾(}),然后用一个变量来容纳它


7、symbol类型
symbol 用于唯一的标识符。

  • 通常,数值、字符串、布尔值这三种类型,合称为原始类型(primitive type)的值,即它们是最基本的数据类型,不能再细分了。对象则称为合成类型(complex type)的值,因为一个对象往往是多个原始类型的值的合成,可以看作是一个存放各种值的容器。至于undefined和null,一般将它们看成两个特殊值。

typeof运算符

typeof 运算符可以查看变量的类型。
它支持两种语法形式:

  • 作为运算符:typeof x。
  • 函数形式:typeof(x)。
    换言之,有括号和没有括号,结果是一样的。
    对 typeof x 的调用返回数据类型的字符串。
typeof undefined // "undefined"
typeof 0 // "number"
typeof true // "boolean"
typeof "foo" // "string"
typeof Symbol("id") // "symbol"
typeof Math // "object"  
typeof alert // "function" 

Math 是一个提供数学运算的内建对象。
typeof alert 的结果是 "function",因为 alert 在语言中是一个函数。


五、数据类型转换

概念:大多数情况下,运算符和函数会自动转换将值转换为正确的类型。称之为“类型转换”。比如,alert会自动将任何值转换为字符串。算术运算符会将值转换为数字。

  • 有三种常用的类型转换:转换为 string 类型、转换为 number 类型和转换为 boolean 类型。

  • ToString—— 输出内容时 ToString 发生转换,或通过 String(value) 进行显式转换。原始类型值的 string 类型转换通常是可预见的。

  • ToNumber – 进行算术操作时发生 ToNumber 转换,或通过 Number(value) 进行显式转换。

  • ToNumber 转换遵循以下规则:

值             变成…
undefined      NaN
null            0
true / false    1 / 0
string         字符串“按原样读取”,两端的空白被忽略。空字符串变成 0。出错变成 NaN。

ToBoolean – 进行逻辑操作时发生 ToBoolean转换。或通过 Boolean(value)进行显式转换。
ToBoolean遵循以下规则:


          值                               变成…
0, null, undefined, NaN, ""               false
其他值                                     true
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 看到你,你瞬间成了山谷里回荡的歌声 悠扬,又孤寂…… 你的笑,是悬崖边起舞的红围巾, 等待夕阳无限…… 我想化为山...
    王兄保重阅读 219评论 0 0
  • 啊,细雨不要脸 随地大小便 啊,你这家伙更离谱 看它大小便 啊,我能怎么办 闭上眼睛看不见看不见 啊,还能听到 啊,蓝瘦
    罗布泊的小哆啦阅读 131评论 0 0
  • 8月6日-8月12日,为确定明年公司的疗休养选址,在工会的组织下,需要去四个初选地方考察,整个一周连续出差,一连辗...
    小丽_7436阅读 1,187评论 0 1