js红宝书第三章语法及数据类型

Chapter3  语言基础

语法:

1、区分大小写

2、标识符:以字母/下划线/美元符号开始,驼峰命名法

3、单行注释://   多行注释:/**/

4、严格模式:在函数最上方use strict,现代所有浏览器都支持严格模式

function doSomething() {
  "use strict";
  // 函数体
}

5、语句以;结尾,代码段用{}包裹

关键字与保留字:

break       do          in            typeof         case        else        instanceof    var        catch       export      new           void
class       extends     return        while      const       finally     super         with       continue    for         switch        yield
debugger    function    this        default     if          throw        delete      import      try

 始终保留:

enum


严格模式下保留:

implements  package     public        interface   protected   static      let         private


模块代码中保留:

await

 不使用以上关键字和保留字作为标识符或者是对象属性名

变量:

var     const     let (后两个只支持在ES6及更高版本)

var声明局部变量,函数作用域,不带var创建的对象和属性为全局变量;声明的变量会自动提升至当前代码块最上方,即“提升”
let块作用域,不会被提升,全局声明不允许重名,for循环中定义的迭代变量不会渗透

for (var i = 0; i < 5; ++i) {
    setTimeout(() => console.log(i), 0)
}
// 你可能以为会输出0、1、2、3、4
// 实际上会输出5、5、5、5、5

for (let i = 0; i < 5; ++i) {
    setTimeout(() => console.log(i), 0)
}
// 会输出0、1、2、3、4

const声明变量时必须同时初始化变量,并且不可修变量的值

声明变量的限制只适用于他指向的变量的引用

const person = {};
person.name = 'Matt';  // ok

const不能用于声明迭代变量,因为迭代变量会自增或自减,但是可以声明一个不会被改变的循环变量

let i = 0;
for (const j = 7; i < 5; ++i) {
  console.log(j);
}
// 7, 7, 7, 7, 7

for (const key in {a: 1, b: 2}) {
  console.log(key);
}
// a, b

for (const value of [1,2,3,4,5]) {
  console.log(value);
}
// 1, 2, 3, 4, 5

总结:优先使用const,其次使用let,最后不使用var

数据类型:

UndefinedNullBooleanNumberStringSymbol,以及Object,无序键值对的集合

1、typeof判断变量的类型

2、Undefined:声明了变量但是没有初始化

3、null:表示一个空指针对象

4、Boolean:true不等于1,false不等于0

不同类型与布尔值之间的转换规则o

5、Number类型:表示整数型和浮点型

  • 浮点值会被尽可能地转化为整形数值
  • 值的范围:(5e-324,1.797 693 134 862 315 7e+308),超出使用Infinity表示,可使用isFinite()函数来判断是否为有限值
  • NaN表示非数值,isNan判断是否为非数值类型
console.log(isNaN(NaN));     // true
console.log(isNaN(10));      // false,10是数值
console.log(isNaN("10"));    // false,可以转换为数值10
console.log(isNaN("blue"));  // true,不可以转换为数值
console.log(isNaN(true));    // false,可以转换为数值1

数值转换:Number()、parseInt()、parseFloat()将非数值转换为数值类型

let num1 = Number("Hello world!");  // NaN
let num2 = Number("");              // 0
let num3 = Number("000011");        // 11
let num4 = Number(true);            // 1

let num1 = parseInt("1234blue");  // 1234
let num2 = parseInt("");          // NaN
let num3 = parseInt("0xA");       // 10,解释为十六进制整数
let num4 = parseInt(22.5);        // 22
let num5 = parseInt("70");        // 70,解释为十进制值
let num6 = parseInt("0xf");       // 15,解释为十六进制整数
//始终带上第二个参数,以防止出现错误
let num1 = parseInt("AF", 16);  // 175
let num2 = parseInt("AF");      // NaN


let num1 = parseFloat("1234blue");  // 1234,按整数解析
let num2 = parseFloat("0xA");       // 0
let num3 = parseFloat("22.5");      // 22.5
let num4 = parseFloat("22.34.5");   // 22.34
let num5 = parseFloat("0908.5");    // 908.5
let num6 = parseFloat("3.125e7");   // 31250000

6、String类型:不可修改,如果要修改某个变量的字符串值,必须先销毁原有的字符串再重新赋值

可使用"、'、`三种来标示,但是前后使用的符号应该一致

let firstName = "John";
let lastName = 'Jacob';
let lastName = `Jingleheimerschmidt`

let firstName = 'Nicholas"; // 语法错误:开头和结尾的引号必须是同一种

使用length属性来获取字符串长度

toString()方法来转换成字符串,不传参

let value1 = 10;
let value2 = true;
let value3 = null;
let value4;

console.log(String(value1));  // "10"
console.log(String(value2));  // "true"
console.log(String(value3));  // "null"
console.log(String(value4));  // "undefined"

字符串插值通过${}来实现

let value = 5;
let exponent = 'second';
// 以前,字符串插值是这样实现的:
let interpolatedString =
  value + ' to the ' + exponent + ' power is ' + (value * value);

// 现在,可以用模板字面量这样实现:
let interpolatedTemplateLiteral =
  `${ value } to the ${ exponent } power is ${ value * value }`;

console.log(interpolatedString);           // 5 to the second power is 25
console.log(interpolatedTemplateLiteral);  // 5 to the second power is 25

7、Symbol类型

符号是原始值,且符号是唯一的、不可变的

使用Symbol()进行初始化,但是这个并不是构造函数,不可以和new关键字一起使用

let sym = Symbol();
console.log(typeof(sym));//Symble

let foo = Symbol('foo');
console.log(foo);//Symbol(foo)


let a = Symbol('foo');
let b = Symbol('foo');

console.log(a == b);//false

使用Symbol.for()方法创建全局符号注册表

let a = Symbol.for('foo');
let b = Symbol.for('foo');

console.log(a == b);//true

使用符号作为属性

常用内置符号:不可写,不可枚举,不可配置

Symbol.hasInstance(),复杂版的==比较,确定一个对象实例的原型链上是否有原型

Symbol.isConcatSpreadable,布尔值

Symbol.iterator,返回默认的迭代器

Symbol.match(),正则表达式,接受一个参数作为正则判断的子串或者是模式

Symbol.replace(),用传入的子串替换原有的子串

Symbol.search(),返回子串在字符串中的起始位置

Symbol.species,一个函数值,该函数作为创建派生对象的构造函数、

Symbol.split(),拆分字符串

Symbol.toPrimitive(),一个方法,该方法将对象转换为相应的原始值。由ToPrimitive抽象操作使用

Symbol.toStringTag(),一个字符串,该字符串用于创建对象的默认字符串描述

8、Object类型

  • constructor:用于创建当前对象的函数。在前面的例子中,这个属性的值就是Object()函数。
  • hasOwnProperty(propertyName):用于判断当前对象实例(不是原型)上是否存在给定的属性。要检查的属性名必须是字符串(如o.hasOwnProperty("name"))或符号。
  • isPrototypeOf(object):用于判断当前对象是否为另一个对象的原型。
  • propertyIsEnumerable(propertyName):用于判断给定的属性是否可以使用for-in语句枚举。与hasOwnProperty()一样,属性名必须是字符串。
  • toLocaleString():返回对象的字符串表示,该字符串反映对象所在的本地化执行环境。
  • toString():返回对象的字符串表示。
  • valueOf():返回对象对应的字符串、数值或布尔值表示。通常与toString()的返回值相同。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值