JavaScript 基础语法

简介

  JavaScript 是脚本语言

  JavaScript 是一种轻量级的编程语言。

  JavaScript 是可插入 HTML 页面的编程代码。

  JavaScript 插入 HTML 页面后,可由所有的现代浏览器执行。

1、组成部分

  1. 核心(ECMAScript)

  2. 文档对象模型(DOM)控制页面操作

  3. 浏览器对象模型(BOM)控制浏览器中页面意外的操作

2、引入方式

  1. <script>写入js代码</script>

  2. 导入文件:<script src="     .js"></script>

3、变量声明

  3.1 注释和结束符

    注释:单行//,多行/**/

    结束符:" ; "

  3.2 命名规范

    驼峰体,首字母小写,userName,(可以加入数据类型:sUserName)

  3.3 声明变量

    var name = "sun";

    一行可以声明多个变量:var sName='sun', iAge=23;

  3.4 声明方式

    var  全局变量   var 可以声明多次      在全局范围内有效    声明之前,使用会得到undefined。

    let   局部变量   let 只能声明一次       代码块内有效            声明之前,使用会报错。

  3.5 声明后

    声明时未赋值,则得到的时undefined的类型

    可以重新声明,声明之后可以在声明,但原来的值不会丢失。如:

      var sCarname="Volvo";

      var sCarname;    // isCarname的值依然是"Volvo"

JavaScript变量提升(hoisting):
函数及变量的声明都将被提升到函数的最顶部,即变量可以在使用后声明,也可以在使用前声明
示例:
var x=5;
console.log(y);
var y=7;
//结果是undefined, 这是因为变量声明var y被提升了,但初始化并不会提升,

// 解决变量提升,规定每个作用域使用前必须声明变量
// 使用严格模式:use strict,
// ES5新增内容,不是一条语句,就是一个字面量表达式,在旧版中会被忽略
// 示例:
"use strict";
x = 3.14;    // 报错

"use strict";
myFunction();
function myFunction() {
   y = 3.14;   // 报错 (y 未定义)
}

// 在函数内部声明是局部作用域(只在函数内使用严格模式)
x = 3.14;       // 不报错
myFunction();
function myFunction() {
  "use strict";
   y = 3.14;   // 报错 (y 未定义)
}

4、 常量声明

  (python中没有常量,有的只是人为定义的常量BASE_PATH)

  const pie = 3.141592;    // 声明后不能修改且声明时必须赋值,

// 暂时性死区:
var pie = 3.1415926;
if (true){
    console.log(pie); // ReferenceError: pie is not defined
    const pie = "3.1415";
}
// 报错,代码块内如果存在let或者const,代码块会对这些命令声明的变量从块开始就形成一个封闭作用域,
// 代码快内,在声明pie之前使用它会报错。
注意:
    const如何做到变量在声明初始化之后不允许改变?
    其实const保证的不是变量的值不变,而是保证变量指向的内存地址所保存的数据不允许改动。对于简单类型(如number,string,Boolean),值就保存在变量指向的那个内存地址,因此const声明的简单类型变量等于常量;但对于复杂类型(object,array,function),变量指向的内存地址其实保存了一个指向实际数据的指针,所以只能保存指针固定的,至于指针指向的数据结构变不变就无法控制,所以使用const声明复杂类型对象时慎重。

 5、数据类型

   5.1 基本数据类型

    Null, undefined

    number,

      整数和浮点数,特殊类型NaN: not a number, 当其它类型转换成数字时,得不到结果就是这个NaN

     string

    Boolean,true和false

  5.2 引用数据类型

    object 对象

  5.3 类型查询

    typeof 只能查询到string/number/Boolean/object

    undefined和Null得区别:

      undefined:

        1. 当声明变量未初始化时,该变量的默认值为Undefined,

        2. 当函数无明确返回值,返回的也是undefined

      Null:

        1. 表示尚未存在对象

        2. 如果函数或方法要返回的是对象,那么找不到对象返回的就是Null

6、数据类型转换

  数字+字符串:12 + "abc" = "12abc"

  数字+布尔值:12 + true = 13

  字符串+布尔值:true + "abc" = "trueabc"

  强制类型转换

    parseInt 强制转换成整数

      parseInt(3.54) = 3, parseInt("3.54aba") = 3, parseInt("asd3.5") = NaN

    parseFloat 强制转换成浮点数

      parseFloat("6.12") = 6.12, parseFloat("6sdf")=6, parseFloat("6.12sdfs")=6.12

    eval(用法和python一样)

      eval("1+1") =2

7、运算符

  算术运算符

    +,-,*,/,++,--,(i++: 先引用后赋值)

  逻辑运算符

    ==,!=,>, >=, <, <=, &&, ||, !

    2 == "2" 结果是true

    2==="2" 结果是flase(强等于)

  等性运算

    布尔==数字 布尔变数字

    数字==字符串  字符串便数字

    对象==字符串(数字)  对象变字符串(数字)

    示例:

      true==2 结果是false    

      undefined==0结果是false

      null==2 结果是false

      "5"==5结果是true

  关系运算符

    1. 比较字符串使用ASCII对应的数值,

    2. 如果一侧是数字,另一侧是其它类型,如果不能转换成数字类型,就是false

      "25" <"2" 结果是false

      "Blue" < "alpha" 结果是true

      "3" < 2 结果是false

      "1ads"< 2 结果是false(使用的不是强制类型转换)

8、控制语句

  8.1 if...else

var a = 10;
if (a > 5){
 console.log("yes");
}else {
 console.log("no");
}

  8.2 switch

var day = new Date().getDay();
switch (day) {
 case 0:
 console.log("Sunday");
 break;
 case 1:
 console.log("Monday");
 break;
default:
 console.log("...")
}

  8.3 for

for (var i=0;i<10;i++) {
 console.log(i);
}
for ( i in arr){......} //arr 为数组(不推荐使用)

  8.4 while

var i = 0;
while (i < 10) {
 console.log(i);
 i++;
}

  8.5 三元运算

var c = a > b ? a : b;    // 条件a>b成立,返回a,不成立返回b

var a=10,b=20;
var x=a>b ?a:(b=="20")?a:b;

// 结果:
// x的值10

 

posted @ 2019-04-13 23:24  yw_sun  阅读(137)  评论(0)    收藏  举报