js红宝石 第三章-语言基础

3.1 语法

1.大小写敏感

2.标识符 第一个字符必须是字母,下划线(_)或者刀了($)

3.注释 采用c的风格 //

4.严格模式  一些不规范的写法不会被执行

                在开头加上"use strict";

5.语句一般以分号结尾  也可以没有(不推荐)

6.有保留字 如break,class,default等

3.3 变量

3.3.1 var

可以定义一个变量并且给其赋值

var message = "123"
1.声明作用域
function test(){
      var message = '123'; //局部变量
      mess = '456'; // 全局变量
    }
    test();
    console.log(mess);
    console.log(message);

 2. 声明提升

执行如下代码不会报错

console.log(age);
var age = 10;

因为使用var关键字的变量会自动提升到函数作用域的顶部,等价于如下代码

var age;
console.log(age);
age = 10;

结果为undefined

3.let声明

1.let不会被提升

2.let不能重复声明 类似const

3.全局声明  不会成为window的属性(即window.变量被访问为undefined)

4.条件声明  let的作用域是块,所以不会检查前面是否使用过let,同时也就无法在没有声明的情况下使用它

5.for循环渗透问题

使用 var会造成变量渗透问题

<script>
    for(var i=0;i<5;i++){
      setTimeout(()=>console.log(i),0)
    }
  </script>

 

在退出时,所有的变量都是退出时的值

使用let则不会出现

<script>
    for(let i=0;i<5;i++){
      setTimeout(()=>console.log(i),0)
    }
  </script>

 4.const声明

1.const的作用域是块

2.const在定义时必须赋值,而且不能修改(类似元组)

3.不能用const声明迭代变量 但是,只用const声明一个不会被改变的for循环变量,是可以的,像下面:

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

 

5.声明风格以及最佳实践

1.不用var

2.优先const,其次let

3.4 数据类型

3.4.1. typeof

typeof 变量

类似python中的type 用于返回值的类型

3.4.2 undefined

在用var和let声明了值却没有赋值时,相当于给变量赋了undefined

不需要显示的给变量赋值undefined,因为默认值就是undefined

3.4.3 Null

只有一个值null,代表空对象指针

所以typeof null 会返回object

undefined是由null派生来的

所以 undefined==null 结果为true

3.4.4 Boolean

不同类型值之间的Boolean转化规则

数据类型转化为true转化为false
Booleantruefalse
String非空字符串""(空字符串)
Number非0数字0/NaN

Object

任意对象null
UndefinedN/Aundefined

3.4.5Number

1.进制

十进制 直接写出来

八进制 在数字前加0    a = 070

十六进制 在数字前加0x  b = 0x0001

2.科学计数法

let floatNum = 3.1e10 相当于乘了10的10次方

3.值的范围

使用正无穷(Infinity)和负无穷(-Infinity)来表示超出最大范围的数字

4.NaN

Not a Number

在除以0后得到,防止报错直接退出

NaN == NaN 会得到false
 

5.数值转化

使用下面三个函数可以把非数字类型转化为数字类型

Number()

parseInt()

parseFloat()

3.4.6 String类型

1.字符串的定义可以使用  ''   ""  和  ``

2.在涉及特殊含义的字符时 要在前面加 \ 转义符号

3.使用`` 可以跨行定义字符串

<script>
    let a = `a
    b
    c`
  </script>

4.字符串插值

可以在字符串中使用${}插入数值(要用``包裹)

let a,b,c;
let s = `${a} + ${b} = ${c}`

5.模板字面量与标签函数

<script>
    let a = 6;
    let b = 9;
    function simple(strings,a,b,sum){
      console.log(strings);
      console.log(a);
      console.log(b);
      console.log(sum);

      return null
    }
    let untaggedResult = `${ a } + ${ b } = ${ a+b }`
    let taggedResult = simple`${ a } + ${ b } = ${ a+b }`

    console.log(untaggedResult);
    console.log(taggedResult);
  </script>

对于有n个插值的字符串而言,传入的参数是n个,而第一个参数所包含的字符串个数始终是n+1

3.4.7 Symbol

用来表示一个独一无二的值

 3.5 操作符

3.5.1 一元运算符

自增/自减 ++/--

一元加/减 +/-  相当于Number()的类型转化

3.5.2 位操作符

按位非: ~ 返回一补数(十进制)

按位与: &

按位或:|

按位异或:^

左移: <<x

有符号右移: >>x

无符号右移: >>>x

3.5.3 Boolean操作符

逻辑非:!

逻辑与:&&

逻辑或:||

3.5.4 3.5.5 3.5.6 乘性/指数/加性操作符

*

乘/除: */ /

指数运算: **

二元加/减: +/-

3.5.7 3.5.8 关系操作符

<   >  >=  <=

相等:==(转换后相等)  "55" == 55 true

不相等:!=

全等:===(不转换也相等) "55"===55 false

3.5.9 条件操作符

和C的三元表达式一样

a ? b : c

3.6 语句

if

do-while

do{

语句

}while(条件)

while

for

for-in

用于枚举对象中的非符号键属性

for(const propName in window){
 document.write(propName);
}

for-of

严格的迭代语句,遍历可迭代对象的元素

for(const el of [2,3,4,6]){
 console.log(el);
}

标签语句:state

state:statement  给语句添加标签

可以被break/continue语句引用

let num=0
    outermost:
    for(let i=0;i<10;i++)
      for(let j=0;j<10;j++){
        if(i==5 && j==5) continue outermost
        num++
      }
        
    console.log(num); // 95

break/continue

switch case

3.7 函数

function 函数名(参数){

statement
return 返回值

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值