AI智能
改变未来

JavaScript的基础语法–看这一篇就够了


JavaScript基础语法

JavaScript是弱类型脚本语言,声明变量时无需指定变量的数据类型。JavaScript变量的数据类型是解释时动态决定的。但是JavaScript的值保存在内存中,也是数据类型的。

JavaScript的使用

JavaScript代码可以直接写在HTML文件中,也可以单独的写在后缀名为js的文件中。

1内部JavaScript: 使⽤

<script> ... </script>

标签

<script type=\"text/javascript\">...js代码</script>

** 2内联JavaScript处理器**

  • 就是将js代码写⼊html代码中,如在html标签的事件中或超级链接⾥。
<button onclick=\"javaScript语⾔\"></button><a href=\"javascript:alert(\'aa\');alert(\'bb\')\">点击</a>

3外部JavaScript

  • 使⽤外部导⼊js会使代码更加有序,更易于复⽤,且没有了脚本的混合,HTML也会更加易
    读。
<script type=\"text/javascript\" src=\"my.js\"></script>

运算符

算数运算符

运算符 描述 例子 x 运算结果 y 运算结果
+ 加法 x=y+2 7 5
减法 x=y-2 3 5
* 乘法 x=y*2 10 5
/ 除法 x=y/2 2.5 5
% 取模(余数) x=y%2 1 5
++ 自增 x=++y 6 6
自减 x=–y 4 4
注意事项:
  • 如果对字符串进行加法操作,会进行拼串
  • 任何值和字符串做加法运算,都会转换成字符串进行拼接,利用这一特点可以将任意类型转换为字符串,只需要加上一个空串,这是一种隐式的类型转换,运算顺序从左到右 1+2+“3”; // “33” 1+“2”+3; // “123”
  • var a=3/2; // 1.5
  • 任何值和NaN做运算,都得NaN

+作为符号

  • +正号,对非Number值,会先转换为Number,然后再运算,可以做隐式转换1++“2”+3; // 6
  • -负号,对非Number值,会先转换为Number,然后再运算

赋值运算符

运算符 例子 等同于 运算结果
= x=y x=5
+= x+=y x=x+y x=15
-= x-=y x=x-y x=5
*= x*=y x=x*y x=50
/= x/=y x=x/y x=2
%= x%=y x=x%y x=0
注意事项:
  • 将符号右侧的值赋值给左侧的变量
  • x+=y等价于x=x+y,注意事项和算术运算符没有区别

比较运算符

运算符 描述 比较 返回值
== 等于 x==8 false
x==5 true
=== 绝对等于(值和类型均相等) x===“5” false
x===5 true
!= 不等于 x!=8 true
!== 不绝对等于(值和类型有一个不相等,或两个都不相等) x!==“5” true
x!==5 false
> 大于 x>8 false
< 小于 x<8 true
>= 大于或等于 x>=8 false
<= 小于或等于 x<=8 true

逻辑运算符

运算符 描述 例子
&& and (x < 10 && y > 1) 为 true
|| or (x5 || y5) 为 false
! not !(x==y) 为 true
注意事项:
  • !非,可以用来对一个值进行非运算,对一个布尔值进行取反操作;对一个值两次取反,则不会变化,可以用来进行隐式转换成布尔类型;对非布尔值取反,会将其转换为布尔值,再取反
  • &&与,对符号两侧的值进行与运算并返回结果,一假即假;该运算属于短路运算,若第一个为false,则不会看第二个;若第一个为true则必然返回第二个值,若第一个值为false则必然返回第一个值
  • ||或,对符号两侧的值进行或运算并返回结果,一真即真该运算属于短路运算,若第一个为true,则不会看第二个;若第一个为true则必然返回第一个值,若第一个值为false则必然返回第二个值
  • && ||非布尔值的情况:先将其转换为布尔值再运算,并返回原值

三目运算符

var number=(1+1==2)?true:false;   //返回truevar result=(1+1!=2)?\"yes\":\"no\"	  //返回no

注意事项:

  • 和Java的格式一样,其中A?B:C中的B和C可以是不同类型。

typeof 和 instanceof运算符

typeof

typeof 是一个一元运算,放在一个运算数之前,运算数可以是任意类型。它返回值是一个字符串,该字符串说明运算数的类型。typeof 可以用来检测给定变量的数据类型。

基本数据类型

var a = [34, 4, 3, 54],b = 34,c = \'adsfas\',d = function () { console.log(\'我是函数\') },e = true,f = null,g;console.log(typeof (a));//objectconsole.log(typeof (b));//numberconsole.log(typeof (c));//stringconsole.log(typeof (d));//functionconsole.log(typeof (e));//booleanconsole.log(typeof (f));//objectconsole.log(typeof (g));//undefined

对象,函数

1.对于对象、数组、null 返回的值是 object 。比如typeof(window),typeof(document),typeof(null)返回的值都是object。
2.对于函数类型,返回的值是 function。比如:typeof(eval),typeof(Date)返回的值都是function。

var a = null;alert(typeof(a))				//objectalert(typeof(Date));            // function(Date使用前需要实例化的原因)alert(typeof(null));            // objectalert(typeof(undefined))        // undefinedalert(typeof(NaN))              // numberalert(typeof(NaN == undefined)) // booleanalert(typeof(NaN == NaN))       // booleanvar str = \'123abc\'alert(typeof(str++))            // numberalert(str)                      // NaN

instanceof

  • instanceof运算符用来判断一个构造函数的prototype属性所指向的对象是否存在另外一个要检测对象的原型链上。通常来讲,使用 instanceof 就是判断一个实例是否属于某种类型。

  • a instanceof b:判断a是否为b的实例,可以用于继承关系中

  • b是c的父对象,a是c的实例,a instanceof b 与 a instanceof c 结果均为true

简单案例

function Person(){};var p =new Person();console.log(p instanceof Person);//true

复杂案例

function Person(){};function Student(){};var p =new Person();Student.prototype=p;//继承原型var s=new Student();console.log(s instanceof Student);//trueconsole.log(s instanceof Person);//true

分支语句

if语句

if-else语句

if-else if-else语句

switch分支语句

循环语句

for循环

最经典的循环之一,大部分编程语言都有for循环

格式

for (语句 1; 语句 2; 语句 3){被执行的代码块}

语句 1 (代码块)开始前执行

语句 2 定义运行循环(代码块)的条件

语句 3 在循环(代码块)已被执行之后执行

实例

盒子中有6个小球,将小球一一取出;

for(var i=1;i<7;i++){console.log(\'第\'+i+\"个小球\");}

从上面的例子中,您可以看到:

Statement 1 在循环开始之前设置变量 (var i=1)。

Statement 2 定义循环运行的条件(i 必须小于 7)。

Statement 3 在每次代码块已被执行后增加一个值 (i++)。

while循环

最经典的循环之一,大部分编程语言都有while循环

语法如下所示:

while(condition){// 要执行的代码块}

condition

是循环的条件,只有当循环条件成立时,才会执行花括号

{}

中的代码,如果条件不成立则不会执行代码。

当我们使用

while

循环时,只要指定条件为 true,循环就可以一直执行。

并且只要条件一直满足,就可以实现一个无限循环,例如:

while(true){console.log(\"1\");}

当我们不知道循环次数,但是知道结束条件时可以选择如下格式。

condition

是跳出循环的条件,如果不满足,执行代码块,代码块必须能不满足逐渐走向满足,不然就是死循环了!

while(true){if(condition){break;}else{//执行的代码块}}

do-while循环

格式

do{循环语句;}while(表达式);

注意事项:

  1. while后面的分号不能忘记写。
  2. 循环条件中使用的变量需要经过初始化。
  3. 循环体中,应有结束循环的条件,否则会造成死循环。

do-while和while的区别

do...while循环和while循环的区别:while循环是先判断表达式的真假,然后再执行循环语句,所有如果表达式为假的话,就不会执行循环语句。do...while循环是先执行一次循环语句,然后再去判断一次表达式的真假。所以即使表达式为假,也会执行一次循环语句。while循环用的情况多,如果while处理逻辑比较别扭时,就用do...while循环。

增强for循环

JavaScript为了方便我们遍历操作集合所新增的循环,有一下两种:

for..in

循环

for (property in obj) {console.log(property, obj[property]);}123

for..of

循环

for (element of iterable) {console.log(element);}123

区别

  • for..in

    循环属历史遗留,用于遍历对象的属性(数组的索引值也算属性)。
    但有一个缺点:如果手动向数组添加成员属性,则:
    虽然数组的length不变,但用

    for..in

    遍历数组会遍历到那些新定义的属性。

  • for..of

    循环修复了

    for..in

    存在的问题,他只遍历属于对象本身的属性值。
    且这个对象必须是

    iterable

    可被迭代的。如

    Array, Map, Set

数组

数组(Array)是一个用于保存多个数据的结构,按照线性结构来保存的。

1、创建数组

两种格式:

  • 基本格式创建
  • Array()对象创建
var arrayName = [];  // 创建空数组var arrayName = [\'赵\', \'钱\', \'孙\', \'李\'];var arrayName = new Array();  // 创建空数组var arrayName = new Array(\'赵\', \'钱\', \'孙\', \'李\');

2、数组的使用

  • 获取 或 设置数组中的元素,一律使用下标(0—length-1)
// 取值var arrayName = [\'赵\', \'钱\', \'孙\', \'李\'];var zhao = arrayName[0] ;  // \'赵\'var li = arrayName[3] ;  // \'李\';var kong = arrayName[4] ;  // undefined;// 赋值arrayName[0] = \"周\";  // [\'周\', \'钱\', \'孙\', \'李\']arrayName[4] = \"吴\"   // [\'周\', \'钱\', \'孙\', \'李\', \'吴\'] 添加元素arrayName[6] = \"郑\"   // [\'周\', \'钱\', \'孙\', \'李\', \'吴\', , \'郑\'] arrayName[5]自动为undefined

3、获取数组的长度

  • 属性:length
  • 用法:array.length
// 遍历数组var arrayName = [\'赵\', \'钱\', \'孙\', \'李\'];for(var i = 0; i < arrayName.length; i++){console.log(arrayName[i])}// 找到插入最新元素时的位置var arrayName = [\'赵\', \'钱\', \'孙\', \'李\'];arrayName[arrayName.length] = \'周\'  // [\'赵\', \'钱\', \'孙\', \'李\', \'周\']

4、关联数组

  • 索引数组:以数字为下标
  • 关联数组:以字符串为下标
var arrayName = [];arrayName[\"zhao\"] = \"赵\";arrayName[\"qian\"] = \"钱\";arrayName[\"sun\"] = \"孙\";arrayName[\"li\"] = \"李\";arrayName[0] = \"周\";arrayName[1] = \"吴\";arrayName[2] = \"郑\";arrayName[3] = \"王\";arrayName.length   // 4  只能计算索引数组的长度// 遍历关联数组或者索引数组的方式for (var i in arrayName){console.log(arrayName[i])}

数组的常用API

  • 1、toString()作用:将数组转换为字符串,并返回,不改变原数组
var arrayName = [\'赵\', \'钱\', \'孙\', \'李\'];var str = arrayName.toString();console.log(str);  // 赵,钱,孙,李console.log(arrayName) // [\'赵\', \'钱\', \'孙\', \'李\']1234
  • 2、join(seperator)作用:返回一个由指定连接符连接的字符串
  • 参数:seperator(连接符)
var arrayName = [\'赵\', \'钱\', \'孙\', \'李\'];var str = arrayName.join(\"|\");console.log(str);  // 赵|钱|孙|李console.log(arrayName) // [\'赵\', \'钱\', \'孙\', \'李\']1234
  • 3、concat(arr1,arr2…)作用:拼接多个数组,并返回拼接后的数组,且不改变原数组
var arrayName1 = [\'赵\', \'钱\', \'孙\', \'李\'];var arrayName2 = [\'周\', \'吴\', \'郑\', \'王\'];var arrayName3 = [];console.log(arrayName3.concat(arrayName1,arrayName2));// [\'赵\', \'钱\', \'孙\', \'李\', \'周\', \'吴\', \'郑\', \'王\']console.log(arrayName3);  //  [],不会改变原数组123456
  • 4、reverse()作用:数组反转,返回反转后的数组,会改变原数组
var arrayName1 = [\'赵\', \'钱\', \'孙\', \'李\'];var arrayName2 = arrayName1.reverse();console.log(arrayName1);  // [\"李\", \"孙\", \"钱\", \"赵\"]console.log(arrayName2);  // [\"李\", \"孙\", \"钱\", \"赵\"]1234
  • 5、sort()作用:对数组进行排序,默认情况下,按照元素的Unicode码进行排序,并会改变原数组
  • 注意:允许通过自定义的排序函数来指定数字的排序规则
  • 语法:arrayName.sort(排序函数)
var arrayName1 = [103, 36, 57, 88, -1, -204, 93];console.log(arrayName1.sort())  //[-1, -204, 103, 36, 57, 88, 93]console.log(arrayName1)  //[-1, -204, 103, 36, 57, 88, 93]// 自定义排序函数function sortAsc(a, b) {return a - b;     // 升序排序,冒泡排序算法,a-b>0时,交互位置}console.log(arrayName1.sort(sortAsc))  // [-204, -1, 36, 57, 88, 93, 103]arrayName1.sort(function (a, b) {return b - a})   // [103, 93, 88, 57, 36, -1, -204] 匿名函数,降序排列console.log(arrayName1)1234567891011
  • 6、进出栈操作作用:提供快速操作数组头部或尾部的方法,改变原数组
函数 说明 语法
push() 入栈,向数组的尾部添加新元素,并返回新数组的长度 arrayName.push(“周”),返回数字
pop() 出栈,删除并返回数组尾部的元素 arrayName.pop(),返回尾部元素
unshift() 向数组头部添加新元素,并返回新数组长度 arrayName.unshift(“周”),返回数字
shift() 删除并返回数组头部的元素 arrayName.shift(),返回头部元素
var arrayName = [\"赵\", \"钱\"];console.log(arrayName.push(\"孙\"));      // 3console.log(arrayName);                 // [\"赵\", \"钱\", \"孙\"]console.log(arrayName.pop())            // 孙console.log(arrayName);                 // [\"赵\", \"钱\"];console.log(arrayName.unshift(\"孙\"));   // 3console.log(arrayName);                 // [\"孙\", \"赵\", \"钱\"]console.log(arrayName.shift());         // 孙console.log(arrayName);                 //[\"赵\", \"钱\"];123456789101112
  • 7、二维数组说明:数组中的数组
var arrayName = [];arrayName.push([1,2,3]);arrayName.push([4,5,6]);arrayName.push([7,8,9]);console.log(arrayName);console.log(arrayName[1][1]);  // 5
赞(0) 打赏
未经允许不得转载:爱站程序员基地 » JavaScript的基础语法–看这一篇就够了