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  数据类型不相同
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容