我与JS的那些陈年旧事(一)

JavaScript概述

  • 全称JavaScript,简称JS.
  • JS是一门基于对象事件驱动脚本语言,专门为网页交互而设计,主要应用在客户端(浏览器)。

1.JavaScript特点

  • 解释执行,没有编译过程
  • 基于对象:JS没有编译过程,也没有类的概念,但可以通过一些机制模拟面向对象
  • 事件驱动: 在JS中, 很多地方都是通过事件触发来驱动函数执行, 从而实现某些功能.
  • 弱类型(var)

2.HTML中引入JS方式

  • 直接将JS代码写入HTML元素上

    
  • 第二种引入方式: 通过script标签
 
     
  • 第三种方式: 引入外部的JS文件

    

3.JavaScript语法

  • 数据类型

1.基本数据类型

数值类型(number):在JS中, 数值类型底层只有一种, 就是浮点型.
在需要的时候,JS会在浮点型和整型之间自动的进行转换

3.4+2.6=6;

特殊值:

Infinity:正无穷大

NaN: 表示非数字,NaN和任何值都不相等, 包括它本身.

字符串类型(string):在JS中, 字符串属于基本数据类型.JS中的字符串常量可以使用双引号或者单引号引起来.

var str1 = "Hello JS";
var str2 = 'Hello JS';

布尔类型(boolean):布尔类型的值分为true和false.

var Bool = true;

undefined:表示变量未定义(其实是变量声明了但是没有赋值。

null:空值

2.复杂数据类型

对象(函数/数组/对象)

var app = function(){
    alert("This is a function");
}
  • 变量和运算符

1.变量的定义:在JS中, 是通过 var 关键字来声明变量

var str = "Hello JS"; //声明字符串
var num = 100;  //声明数值
//声明函数
var f = function([参数列表]){
    //函数体
}
var arr = [100,"hello",true];  //声明数组
var date1 = new Date();  //声明对象

在JS中, 通过var 声明的变量本身是不区分类型. 变量可以指向任意的数据类型.

var x = "abc";
x = 100;
x = true;

2.运算符:JS中的运算符和Java中的运算符大致相同

算术运算符: +,-,*,/,%,++,--

赋值运算符: =,+=,-=,*=,/=,%=

比较运算符: == ,!= ,=== ,!== ,>,>=,<,<=

位运算符: & , |

逻辑运算符: && ,||

前置逻辑运算符: ! (not)

三元运算符: ? :

其他运算符: typeof, delete

1.== 和===的区别?

(1) 如果在比较时, 比较的两个值属于同一种数据类型, 此时, == 和===没有区别, 比较的结果是一样的!

(100+23) == 123; //true
(100+23) === 123; //true

(2)如果在比较时, 比较的两个值不属于同一种数据类型, 此时, ===不予比较,直接返回false.==是先将两个值转成同一种数据类型, 再比较是否相等.

"123" == 123;  //true
"123" === 123;  //false

2.typeof运算符:用于返回变量或者表达式的数据类型

var x = 123;
document.write(typeof x +"
");//number x = "123"; document.write(typeof x +"
");//string x = true; document.write(typeof x +"
");//boolean document.write(typeof 123+"abc"+"
");//numberabc document.write(typeof (123+"abc"));//string
  • 语句

JS中的语句和Java中的大致相同

在JS中, 判断条件或者循环条件即使不是布尔类型, 也可以执行, 是先转成布尔类型再进行判断

1.if...else

var x = 123;
if( x = 100){//如果判断条件不是布尔类型,先转成布尔类型再判断
    console.log("yes");
}else{
    console.log("no");
}

2.switch

var day = 3;
switch(day){
    case 1: console.log("周一");break;
    case 2: console.log("周二");break;
    case 3: console.log("周三");break;
    case 4: console.log("周四");break;
    case 5: console.log("周五");break;
    default:
    console.log("周末");
}

3.循环

for(var i = 0;i<5;i++){
    console.log("这是第"+(i+1)+"次循环!");
}
  • 数组

1.声明方式

通过Array函数声明数组

var arr1 = new Array();//声明一个空数组
var arr2 = new Array(true,"abc",123);
//声明一个具有初始值的数组
var arr3 = new Array(10);

console.log( "arr1:"+arr1 );
console.log( "arr2:"+arr2 );
console.log( "arr3:"+arr3 );

通过数组直接量声明数组

var arr4 = [];//声明空数组
var arr5 = ["hello",123,true];//声明有初始值的数组

2.常见属性及方法

length属性 – 用于返回数组的长度

var arr6 = ["hello", true, "abc", 123];
console.log("数组的length:"+ arr6.length );//4

pop/shift 方法-- 删除数组中最后一个(或第一个)位置的元素并返回该元素

var arr6 = ["hello", true, "abc", 123];
console.log("pop:"+ arr6.pop() );//123
  • 函数

函数其实是一个具有功能的代码块, 可以反复调用

1.声明方式

//声明方式1:
//无参
function fun1(){
    alert("fun1函数执行啦!");
}
fun1();
//有参
function fun2(name,nickname){
    alert(name+":"+nickname);
}
fun2("张三","三子");

JS函数的细节: 在JS中调用函数时, 函数的参数多传或者少传也可以调用函数, 但是可能会引发一些问题或者错误!

//声明方式2:
var fn3 = function(name,age){
    alert(name+":"+age);
}
fn3("李四",18);
  • 对象

1.JS自定义对象

声明方式

//================== 方式1 ==================//
        function Person(){}
        var p1 = new Person();
        
        //动态为对象添加属性的方法
        p1.name = "李四";
        p1.age = 18;
        p1.run = function() {
            // body...
            console.log(this.name+":"+this.age);
        }

        //访问p1对象上的属性和方法
        console.log(p1.name);
        console.log(p1.age);
        p1.run();
        //=========
        function Person(name, age){
            this.name = name;
            this.age = age;
            this.run = function(){
                console.log(this.name+":"+this.age);
            }
        }
        var p2 = new Person("张三",20);
        console.log(p2.name);
        console.log(p2.age);
        p2.run();

//================= 方式2 (类JSON)=================//
        var p3 = {
            "name": "王五",
            "age" : 35,
            "run" : function(){
                console.log(this.name+":"+this.age);
            }
        };
        console.log(p3.name);
        console.log(p3.age);
        p3.run();

2.JS内置对象

(1).String对象
var str1 = new String("abc"); //对象
var str2 = new "abc";  //基本数据类型string
alert(typeof str1);  //object
alert(typeof str2);  //string

//string类型在需要时会自动转化成对应的包装对象
alert(str2.toString());
  • 常见属性和方法
var str = "Hello JavaScript...Java";

//(01)length属性 -- 返回字符串的长度
console.log(str.length);  //23

//(02)charAt方法 -- 返回指定索引处的字符
console.log(str.charAt(2));  //"1"

//(03)indexOf方法 -- 根据子字符串到字符串进行查找, 返回子字符串第一次出现的位置.
console.log(str.indexOf("Java"));  //6

//(04)lastIndexOf方法 --根据子字符串到字符串进行查找, 返回子字符串最后一处的位置.
console.log(str.lastIndexOf("Java")));  //19

//======================================//
//i -- ingroeCase忽略大小写
//g -- global全局检索 
//======================================//

//(05)match方法 -- 根据正则表达式到字符串中进行匹配, 返回包含所有符合正则表达式的子字符串的数组
var str3 = "Hello JavaScript...Java";
var reg = /Java/g;
alert(str3.match(reg));  //Java, Java

// (06) repace方法
alert(st3.replace(reg2,"C++"));  //Hello C++Script...C++

//(07)search方法 -- 根据正则表达式到字符串中进行匹配, 返回第一次出现的位置.
alert(st3.search(reg3));//6

//(08)split方法 -- 根据指定的字符切割字符串,返回一个数组
alert(str3.spilt("..."))  //["Hello JavaScript", "Java"]

//(09)slice方法 -- 从start开始截取,截取到end这个位置.(包含start, 不包含end)
alert(str3.slice(6.10));  //Java

//(10)substr方法 -- 从start开始截取,截取指定长度的字符串
alert(str3.substr(6,4));  //Java

//(11)toLowerCase -- 转小写,示例略。
//(12)toUpperCase -- 转大写,示例略。
(2).Array对象
(3).Date对象
  • 声明方式
//(1)声明方式一
var date1 = new Date();//表示当前时间
alert(date1.toLocaleString());

//(2)声明方式二
var date2 = new Date(1000*3600);//1970-1-1
alert(date2.toLocaleString());

//(3)声明方式三
//月份是从零开始, 0表示1月, 11表示12月
var date3 = new Date(2017,10,11);
alert(date3.toLocaleString());
  • 方法
方法 相关描述
getFullYear() 年份
getMonth() 月份
getDate()
getDay() 星期几
(4).Math对象
方法 相关描述
Math.PI 返回圆周率
Math.ceill 向上取整
Math.round 四舍五入
Math.floor 向下取整
Math.random 获取一个伪随机数(0~1之间的浮点数)
(5).Global对象

Global表示全局对象, 可以直接调用其属性或方法(不需要加对象点);

方法 相关描述
parseInt() 将传入的值转成整数
parseFloat() 将传入的值转成浮点数
isNaN 判断一个值是否是非数字
eval 将一段字符串按照JS代码来解释执行
(6).RegExp对象

(1)声明方式

//方式一
var reg1 = new RegExp(“^\\w+@\\w+(\\.\\w+)+$”);

//方式二
var reg2 = /^\w+@\w+(\.\w+)+$/;

(2)test方法:用来检测字符串是否符合该正则表达式, 符合返回true, 不符合返回false

//======= 简单的邮箱验证 =========//
var email = "[email protected]";
var reg2 = /^\w+@\w+(\.\w+)+$/
//^和$是开始和结束标记, 表示整个字符串都符合该正则表达式时才会返回true
alert(reg2.test(email));

标识符


i -> ignoreCase 忽略大小写

g -> global 全局检索


你可能感兴趣的:(我与JS的那些陈年旧事(一))