js学习笔记1(语言基础)

1.基本概念

定义: 运行在客户端的一种脚本语言,不需要进行编译。
作用:

  • 表单的动态检测
  • 服务器的开发(node.js)
  • 桌面程序(electron)
  • App (cordova)
  • 控制硬件 — 物联网(Ruff)
  • 游戏开发 — (cocos2d-js)

执行:

  • 渲染引擎:用来解析HTML与CSS,俗称内核,比如chrome的blink,和老版本的webkit。
  • JS引擎: 又称js解析器,用来读取网页中的JavaScript代码,对其处理后运行,比如chrome的V8。

组成

  • ECMAScript:JavaScript语法
  • DOM:页面文档对象模型
  • BOM:浏览器对象模型

2.变量声明(var let const)

var变量:所有版本都可以使用。
  • 声明作用域
var temp = "abc";   //1.全局变量
function fn(){
  var temp2 = "abc";  //2.局部变量
  temp3 = "abc";   //3.去掉var操作符,自动升级为全局变量(不推荐使用)
}
fn();
console.log(temp);   //正常输出
console.log(temp2);   //报错
console.log(temp3);   //正常输出
  • 声明提升
    使用var声明的变量会自动提升道作用域的顶部,并且还可以重复声明同一个变量
function  fun(){
        console.log(num) //undefined
        var num = '25';
    }
    fun();
//fun 等价于 fun2
    function  fun2(){
        var num ;
        console.log(num)
        num = '25';
    }
    fun2();
let变量:只能在ECMAScript6及以后的版本使用。

作用和var差不多,但是最主要的区别就是let声明范围的是块作用域,而var声明的的范围是函数作用域。在同一个块作用域中,只能声明一次

  let name ='five';
    let name ='five';// SyntaxError: Identifier 'name' has already been declared
   if (true){
       var num = '123';
       console.log(num) //123
       let count = '456';
       console.log(count); //456
   }
   console.log(num); //123
   console.log(count);  // ReferenceError: count is not defined
  • 其他区别:
    1.暂时性死区:let申明的变量不会在作用域中被提升。
    2.全局声明:let在全局作用域中声明的变量不会成为window对象的属性,(var声明的对象会)
   var name = 'five';
    console.log(window.name);   //five

    let sex = 'nan';
    console.log(window.sex);    //undefined

3.条件声明:在if条件下,在使用var声明变量时,由于声明会被提升,js引擎会将多余的声明提升到作用域的顶端合并成为一个声明,let的作用域是块,所以不会检查前面是否已经使用let声明过同名变量,同时也就不可能再没有声明的情况下声明它。
4.for循环中的let声明:在使用let申明迭代变量的时候,js引擎会给每个迭代循环声明一个新的迭代变量,每个setTimeout引用的都是不同的变量实例。

  for (var i = 0; i < 5; i++) {
        setTimeout(() => {
            console.log(i); //5 5 5 5 5 
        }, 0)
    }
    for (let j = 0; j < 5; j++) {
        setTimeout(() => {
            console.log(j);  // 0 1 2 3 4
        }, 0)
    }
const常量:只能在ECMAScript6及以后的版本使用。

const与let基本相同,区别就是在于:在声明变量的是时候必须初始化值,且尝试修改const声明的变量会导致错误。(对象除外,即使用const声明的对象,可以修改这个对象内部的属性。)

    //不允许给常量赋值
    const age = 15;
    age = 22; //TypeError: Assignment to constant variable.

    //不允许重复赋值
    const name = 'a';
    const name = 'b'; //SyntaxError: Identifier 'name' has already been declared
    
    //声明的作用域是块
    const data = 'c';
    if (true) {
        const data = 'd';
    }
    console.log(data);  //c;

总结:1.不使用var,由let或者const代替,2.优先使用const,let次之。

3.数据类型(基本数据类型:Undefined,Null,Boolean,Number,String,Symbol(符号,ECMAScript6新增)复杂数据类型:Object)

  • typeof操作符:是一个操作符,而不是函数,所以可以不需要参数(但是可以使用)。
    1.“undefined” 表示值未定义
    2.“boolean” 表示值为布尔值
    3.“string” 表示值为字符串
    4.“object” 表示值为对象(而不是函数)或者null
    5.“function” 表示值为函数
    6.“symbol” 表示值为符号
    例子:
 let message = 'hello word';
    console.log(typeof message);    //string
    console.log(typeof (message));  //string
    console.log(typeof 95);     //number
    let car = null;
    console.log(typeof car);     //object
  • Null类型:只有一个值,特殊值null,null表示一个空对象的指针,也就解释了给typeof 传一个null会返回“object”的原因。
  • Boolean类型:可以将其他所有的数据类型转换成为Boolean值,通过调用特定的函数Boolean(),来实现。
    数量类型              转换成为true的值          转换成为false的值
    Boolean                   true                    false
    String                  非空字符串                 “”(空字符串)
    Number                   非零值                    0、NAN
    Object                   任意对象                   null
    Undefined                N/A(不存在)              undefined
  • NAN:特殊数值,表示本来要返回数值的操作失败了(而不是抛出错误)
    1.数值转换
    • Number():转型函数,可用于任何数据类型。
    • parseInt();通常需要获取整数的时候可以使用该函数。字符串最前的空格会被忽略掉,冲第一个非空格字符串开始转换,如果第一个字符不是数值字符、加号或者减号,parseInt()立即返回NaN。如果中间是字符串,就会自动省略字符后面所有的(包含字符串)。第二个参数最好不省略,直接写10,代表十进制
let num4 = Number('');  // 0
let num5 = Number('125ad2');// NaN

let num1  = parseInt('125d22',10);  //125--注意指定进制
let num2  = parseInt('',10);    //NaN
let num3  = parseInt('515.52.2',10);  //515
  • Symbal符号:符号是原始值,且符号实例是唯一,不可变的。符号的用途是确保对象使用唯一标识符,不会发生属性冲突的危险。
  • == 与 ===:相等(==),值相等即为true;全等(===),不仅值要相等,对象类型也要一致。
    let flag = '55' == 55;  //true
    let flag2 = '55' === 55; //false  数据类型不相同

你可能感兴趣的:(js学习笔记1(语言基础))