前端之JavaScript

JavaScript

JavaScript 是一种轻量级的编程语言;是可插入 HTML 页面的编程代码;JavaScript 插入 HTML 页面后,可由所有的现代浏览器执行。

一,编写方式

1、JavaScript代码存在形式

/*方式一*/
<script type="text/javascript" src="commons.js"> //src是导入JS文件
</script>

/*方式二*/
<script>    function func(){        alert("Hello Welcome!")  //弹窗,并显示    }    func()  //执行func函数

 

2、JavaScript代码存放位置

把JavaScript代码放在HTML的<body>标签内的代码底部;

Html代码是从上到下执行,如果Head中的js代码耗时严重,就会导致用户长时间无法看到页面;

如果把js代码放在代码底部这样就不会影响页面显示,后续js的代码继续加载。

二、变量

JavaScript中的变量,局部变量前必须以 var 开头 ,没有加 var 默认为全局变量。

<script>
    name = "alex";  //全局变量
    function f1(){
       var name = 123;  //name是变量名,变量名前加var 表示局部变量
    }
    f1();
    alert(name);
</script>

//  表示单行注释/*   */  表示多行注释

PS:这注释仅在Script块中生效

  

三、数据类型

JavaScript 中的数据类型分原始类型和对象类型:

原始类型

  数字

  字符串

  布尔值

对象类型

  数组

  "字典"

数字、布尔值、null、undefined、字符串,是不可变的。

// null、undefined
null是JavaScript语言的关键字,它表示一个特殊值,常用来描述“空值”。
undefined是一个特殊值,表示变量未定义。

1、数字(Number)

JavaScript中不区分整数值和浮点数值,JavaScript中所有数字均用浮点数值表示。

1)创建:

> num1 = 123;   //直接创建一个原始值
< 123

>num2 = new Number(123);  //根据Number类创建一个对象  

2)转换:

  • parseInt(..)    将某值转换成数字,不成功则NaN
s1 = "qq123";
"qq123"
n1 = parseInt(s1);
NaN
s2 = "456";
"456"
n2 = parseInt(s2);
456  
  • parseFloat(..) 将某值转换成浮点数,不成功则NaN
a1 = 12.345313
12.345313
z1 = parseFloat(a1)
12.345313

特殊值:

  • NaN,非数字。可使用 isNaN(num) 来判断。
s1 = "ww123";
n1 = parseInt(s1);
if(isNaN(n1)){  //isNaN判断是否是数字
else{
}
console.log(isNaN(n1))     
  • Infinity,无穷大。可使用 isFinite(num) 来判断。 flase则表示无穷;true则表示有限
  • typeof, 判断类型
a = "123"
ret = typeof a
"number"

a1 = "q123"
"q123"
ret = typeof a1
"string"

更多数值计算:

常量

Math.E
常量e,自然对数的底数。

Math.LN10
10的自然对数。

Math.LN2
2的自然对数。

Math.LOG10E
以10为底的e的对数。

Math.LOG2E
以2为底的e的对数。

Math.PI
常量figs/U03C0.gif。

Math.SQRT1_2
2的平方根除以1。

Math.SQRT2
2的平方根。

静态函数

Math.abs( )
计算绝对值。

Math.acos( )
计算反余弦值。

Math.asin( )
计算反正弦值。

Math.atan( )
计算反正切值。

Math.atan2( )
计算从X轴到一个点的角度。

Math.ceil( )
对一个数上舍入。

Math.cos( )
计算余弦值。

Math.exp( )
计算e的指数。

Math.floor( )
对一个数下舍人。

Math.log( )
计算自然对数。

Math.max( )
返回两个数中较大的一个。

Math.min( )
返回两个数中较小的一个。

Math.pow( )
计算xy。

Math.random( )
计算一个随机数。

Math.round( )
舍入为最接近的整数。

Math.sin( )
计算正弦值。

Math.sqrt( )
计算平方根。

Math.tan( )
计算正切值。

Math

  

2、字符串(String)  

字符串是由字符组成的数组,但在JavaScript中字符串是不可变的:可以访问字符串任意位置的文本

常见功能:

测试地方在浏览器上进行,按F12,找到"Console"就可以进行调试了。

obj.length 获取字符串的长度

a1 = "alexseven"
"alexseven"
a1.length
9

obj.trim()移除两边空白

a1 = " alexseven "
" alexseven "
b = a1.trim()
"alexseven"

obj.trimLeft()移除左边空白

a1 = " alexseven "
" alexseven "
b = a1.trimLeft()
"alexseven "

obj.trimRight()移除右边空格

a1 = " alexseven "
" alexseven "
b = a1.trimRight()
" alexseven"

obj.charAt(n)根据索引,返回字符串中的第n个字符

b = "alexseven"
"alexseven"
b.charAt(0)
"a"

obj.concat(value, ...) 拼接

b = "alexseven"
"alexseven"
b.concat("Evc")
"alexsevenEvc"

obj.indexOf(substring,start)字符串找指定的字符的索引值

b = "alexseven"
"alexseven"
b.indexOf("x")
3

obj.lastIndexOf(substring,start)子序列位置

b = "alexseven"
"alexseven"
b.lastIndexOf("se")
4
b.lastIndexOf("en")
7

obj.substring(from, to)根据索引获取子序列

b = "alexseven"
"alexseven"
b.substring(0,3)
"ale"
b.substring(5,9)
"even"

obj.slice(start, end)切片

b = "alexseven"

"alexseven"
b.slice(3,6)
"xse"

obj.toLowerCase()大写

obj.toUpperCase()小写

obj.split(delimiter, limit)分割

b = "alexseven"
"alexseven"
b.split("e")
["al", "xs", "v", "n"]

a = "alexalexalex"
"alexalexalex"
a.split(‘le‘,2)
["a", "xa"]
a.split(‘le‘,3)
["a", "xa", "xa"]

obj.search(regexp)从头开始匹配,返回匹配成功的第一个位置

b = "alexseven"

"alexseven"
b.split("e")
["al", "xs", "v", "n"]
b = "alexseven"

"alexseven"
b.search("e")
2
b.search("le")
1

obj.match(regexp)全局搜索,如果正则中有 g 表示找到全部,否则只找到第一个。

obj.replace(regexp, replacement)     替换,正则中有g则替换所有,否则只替换第一个匹配项,

a = "alex7eric8Euuy"
"alex7eric8Euuy"
a.replace(/\d+/,"&");  //找到一个替换后就不继续找
"alex&eric8Euuy"

a.replace(/\d+/g,"&");  //加上g后就是全局,找到所有
"alex&eric&Euuy"

$数字:匹配的第n个组内容;

a = "alex7eric8Euuy"
"alex7eric8Euuy"
a.replace(/(\d+)\w+(\d+)/g,"$1$2")
"alex78Euuy"  

$&:当前匹配的内容;

a = "alex4eric5Euuy"
"alex4eric5Euuy"
a.replace(/(\d+)/g,"$&"+"X")
"alex4Xeric5XEuuy"  

$`:位于匹配子串左侧的文本;

a = "alex4eric5Euuy"
a.replace(/\d+/,"$`")
"alexalexeric5Euuy" 

$‘:位于匹配子串右侧的文本

a = "alex4eric5Euuy"
"alex4eric5Euuy"
a.replace(/\d+/,"$‘")
"alexeric5Euuyeric5Euuy"

$$:直接量$符号;$$ = $

a = "alex4eric5Euuy"
"alex4eric5Euuy"
a.replace(/(\d+)\w+(\d+)/g,"$$")
"alex$Euuy"

  

  

3、布尔类型(Boolean)

布尔类型仅包含真假

  • ==      比较值相等
  • !=       不等于
  • ===   比较值和类型相等
  • !===  不等于
  • ||        或
  • &&      且

4、数组

JavaScript中的数组类似于Python中的列表。

a = [11,22,33,44,55,]  #声明一个数组
[11,22,33,44,55,]

常见功能:

obj.length  数组的大小
a = [11,22,33,44]
[11, 22, 33, 44]
a.length
4 

obj.pop()尾部获取一个元素

a = [11,22,33,"alex",55]
[11, 22, 33, "alex", 55]
a.pop()
55

obj.shift() 头部获取元素

a = [11,22,33,"alex",55]
[11, 22, 33, "alex", 55]
a.shift()
11

追加、插入、删除:

obj.push(ele)       尾部追加元素

obj.unshift(ele)头部插入元素  

obj.splice(start, deleteCount, value, ...)  插入、删除或替换数组的元素

                    obj.splice(n,0,val) 指定位置插入元素

                    obj.splice(n,1,val) 指定位置替换元素

                    obj.splice(n,1)指定位置删除元素

a = [11,22,33,44] #声明一个数组
[11, 22, 33, 44]
a.push(55) #在数组最后增加一个元素
#这里是数组的长度
a
[11, 22, 33, 44, 55]
a.unshift(00) #在数组最前面增加一个元素
#长度
a
[0, 11, 22, 33, 44, 55]
a.splice(3,0,‘insert‘)  #在指定的索引增加一个元素,括号内(3为索引值,0为固定值,要插入的内容)
[]
a
[0, 11, 22, "insert", 33, 44, 55]
a.unshift(100)

  

obj.slice( )切片

a = [11,22,33,"alex",55]
[11, 22, 33, "alex", 55]
a.slice(1,2)
[22]

obj.reverse( )反转

a = [11,22,33,"alex",55]
[11, 22, 33, "alex", 55]
a.reverse()
[55, "alex", 33, 22, 11] 

obj.join(sep)将数组元素连接起来以构建一个字符串

a = [11,22,33,"alex",55]
[11, 22, 33, "alex", 55]
a.join("_")
"11_22_33_alex_55"

obj.concat(val,..)合并 ;连接数组

a = [11,22]
[11, 22]
b = [44,55]
[44, 55]
a.concat(b)
[11, 22, 44, 55]
a
[11, 22]
b.concat(a)
[44, 55, 11, 22]

  

obj.sort( )对数组元素进行排序

a = [11,22,33,"alex",55]
[11, 22, 33, "alex", 55]
a.sort()
[11, 22, 33, 55, "alex"]

  

5、字典

JS的字典,是对象实现的

a = {k1:123,k2:456}
Object {k1: 123, k2: 456}
a[‘k1‘]
123

  

四、其他

1、序列化

  • JSON.stringify(obj) 序列化
b = [11,22,33,44,55]
[11, 22, 33, 44, 55]
JSON.stringify(b);
"[11,22,33,44,55]"
  • JSON.parse(str) 反序列化
s = "[11,22,33,44,55]"
"[11,22,33,44,55]"
JSON.stringify(s);
JSON.parse(s);
[11, 22, 33, 44, 55]

 

2、转义

  • decodeURI( ) URl中未转义的字符
  • decodeURIComponent( ) URI组件中的未转义字符
  • encodeURI( ) URI中的转义字符
  • encodeURIComponent( ) 转义URI组件中的字符
  • escape( ) 对字符串转义
  • unescape( ) 给转义字符串解码
  • URIError 由URl的编码和解码方法抛出
<script type="text/javascript">
s1 = "http://www.cnblogs.com/?k=%E6%9D%8E%E6%9D%BO";
console.log(s1);

    ret = decodeURI(s1);  //解码
    console.log(ret);

    s2 = encodeURI(ret);  //编码
    console.log(s2);

</script>

  

3、eval

JavaScript中的eval是Python中eval和exec的合集,既可以编译代码也可以获取返回值。

  • eval()
  • EvalError 执行字符串中的JavaScript代码
var x=10document.write(eval(x+17))

27

  

4、正则表达式

JavaScript中支持正则表达式,其主要提供了两个功能:

  • test(string) 用于检测正则是否匹配
  • exec(string) 用于获取正则匹配的内容

注:定义正则表达式时,“g”、“i”、“m”分别表示全局匹配,忽略大小写、多行匹配。

5、时间处理

JavaScript中提供了时间相关的操作,时间操作中分为两种时间:

  • 时间统一时间
  • 本地时间(东8区)

 更多操作参见:http://www.shouce.ren/api/javascript/main.html

五、语句和异常

1、条件语句

 if(条件){

    }else if(条件){

    }else{

    }

if条件

&

    switch(name){
        case ‘1‘:
            age = 123;
            break;
        case ‘2‘:
            age = 456;
            break;
        default :
            age = 777;
    }

777

switch条件

2、循环语句

第一种

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

0
1
2
3
4
5
6
7
8
9

第二种

a = [11,22,33,44,55,66,77]
[11, 22, 33, 44, 55, 66, 77]
for (var item in a) {console.log(a[item])}

 11
 22
 33
 44
 55
 66
 77

第三种

while(条件){
    // break;
    // continue;
}

3、异常处理

<script type="text/javascript">
            try{  //这段代码从上往下运行,其中任何一个语句抛出异常该代码块就结束运行

         var tiancai = isme
            }catch(e) {
          
        // 如果try代码块中抛出了异常,catch代码块中的代码就会被执行。
        //e是一个局部变量,用来指向Error对象或者其他抛出的对象
                console.log(e)
            }finally{
       //无论try中代码是否有异常抛出(甚至是try代码块中有return语句),finally代码块中始终会被执行。
                console.log("shuaige is so smart;")
            }
</script>

  

  

六、函数

1、基本函数

//        普通函数
        function func() {
            alert("Hello Word!")
        }//    function是关键字
//        定义一个可传参数的函数
        function func(arg) {
            alert(arg)
        }
        func(‘Superman‘)
//        自执行函数,顾名思义,定义好之后可以自动执行//        ()():
        (function f3(arg) {alert(arg)})("we i good man");

//        匿名函数,了解就行
        var a = function() {
            alert(‘meinv‘);
        };
        a();

  注意:对于JavaScript中函数参数,实际参数的个数可能小于形式参数的个数,函数内的特殊值arguments中封装了所有实际参数。

  function f1(a,b,c) {//    console.log(arguments);//  arguments表示实际多少参数传多少参数
        console.log(a,b,c);
    }
    f1(1,2)
    //可以传一个参数也可以传多个参数,不会异常

  

2、作用域

JavaScript中每个函数都有自己的作用域,当出现函数嵌套时,就出现了作用域链。

当内层函数使用变量时,会根据作用域链从内到外一层层循环如果不存在,则异常。

PS:所有的作用域在创建函数且未执行时候就已经存在

<script>
//    name = "alex";
//    function f1(){
//        var name = "eric";
//        function f2(){
//            alert(name);
//        }
//        f2()
//    }
//    f1();

    name = "alex";
    function f1(){
        var name = "eric";
        function f2(){
            alert(name);
        }
        return f2
    }
    var ret = f1();
    ret();
</script>

注:声明提前,在JavaScript引擎“预编译”时进行。

更多:http://www.cnblogs.com/wupeiqi/p/5649402.html

  

3、闭包

闭包就是,函数里面嵌套函数,并且记住所有的状态。

function f2(){

    var arg= [11,22];

    function f3(){

        return arg;

    }

    return f3;

}

ret = f2();

ret();

f2就是一个闭包,在执行调用的时候只能通过f2去调用,也就是由外向内去获取调用;而不能由内向外

  

4、面向对象

function Foo (name,age) {

    this.Name = name;

    this.Age = age;

    this.Func = function(arg){

        return this.Name + arg;

    }

}

var obj = new Foo(‘alex‘, 18);

var ret = obj.Func("sb");

console.log(ret); 

对于上述代码需要注意:

  • Foo充当的构造函数
  • this代指对象
  • 创建对象时需要使用 new ,new是关键字。

上述代码中每个对象中均保存了一个相同的Func函数,从而浪费内存。使用原型和可以解决该问题:

function Foo (name,age) {

    this.Name = name;

    this.Age = age;

}

Foo.prototype = {

    GetInfo: function(){

        return this.Name + this.Age

    },

    Func : function(arg){

        return this.Name + arg;

    }

}

//Foo.prototype.Func = function () {returnthis.Name +this.Age};//第二种

  

更多详情:http://www.cnblogs.com/wupeiqi/articles/5602773.html

时间: 2024-10-12 02:55:08

前端之JavaScript的相关文章

web前端之JavaScript正则表达式

web前端之JavaScript正则表达式 后面有代码: \d 表示数字 \d? ?表示0个或者一个 \d+ +表示一个或者多个 \d{3} 表示三个 \d{3,5} 表示三到五个 \d{3,} 表示至少出现3次 \d* *表示0到任意个 \b 表示单词边界 \B 表示非单词边界 \bis\b 表示查找" is "的 . 表示任意字符 \ 表示转译 http:(\/\/.+\.jpg) 用()进行分组 $1 获取其内部东西 []表示或 ^表示开头 $表示结尾 g表示全局 \d{4}[/

前端之JavaScript基础

前端之JavaScript基础 本节内容 JS概述 JS基础语法 JS循环控制 ECMA对象 BOM对象 DOM对象 1. JS概述 1.1. javascript历史 1992年Nombas开发出C-minus-minus(C-)的嵌入式脚本语言(最初绑定在CEnvi软件中).后将其改名ScriptEase.(客户端执行的语言) Netscape(网景)接收Nombas的理念,(Brendan Eich)在其Netscape Navigator 2.0产品中开发出一套livescript的脚本

web前端之JavaScript高级程序设计六:事件

web前端之JavaScript高级程序设计六:事件 JavaScript 与 HTML 之间的交互是通过事件实现的.事件,就是文档或浏览器窗口中发生的一些特定的交互瞬间.可以使用侦听器(或处理程序)来预订事件,以便事件发生时执行相应的代码.这种在传统软件工程中被称为观察员模式的模型,支持页面的行为(JavaScript 代码)与页面的外观(HTML 和 CSS 代码)之间的松散耦合. 事件流: 事件流描述的是从页面中接收事件的顺序.但有意思的是, IE 和 Netscape 开发团队居然提出了

json数据在前端(javascript)和后端(php)转换

学习目的:前后端数据交换 思路: json数据格式是怎么样? 后端各种语言怎么将自己内容转换成json格式的内容? 前端怎么接收json数据?有几种方式? js中怎么将json数据转换成js中的数组,对象来使用? 遇到问题: 用ajax接收数据直接赋值给了变量,发现里面是一个数组. 在php中不知道怎么传递数据?(或者说ajax的xmlhttp.responseText是怎么获取后端数据的?) php中把对象和数组转换成json数据格式的方法. 学习过程: 1.json知识普及 从结构上看,所有

前端之JavaScript(二)

一.概述 本篇主要介绍JavaScript的BOM和DOM操作,在前端之JavaScript(一)中介绍了JavaScript基础知识 1.1.BOM和DOM BOM(Browser Object Model)是指浏览器对象模型,它使 JavaScript 有能力与浏览器进行“对话”. DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素. Window对象是客户端JavaScript最高层对象之一,由于window对象是其它大部分对象的

好程序员前端教程-javascript的面向对象

好程序员前端教程-javascript的面向对象一.什么是面向对象?1.面向对象就是把构成问题是无分解成多个对象,建立对象不是为了完成某个步骤,而是描述某个事物在这个解决问题的步骤中的行为.2.面向对象是一种思维方法.3·面向对象是一种编程方法.4·面向对象并不只针对某一种编程语言.二.面向对象和面向过程的区别和联系?1.面向过程侧重整个问题的解决步骤,着眼局部或者具体.2·面向对象侧重具体的功能,让某个对象具有这样的功能,更侧重整体.面向过程的优点:1.流程化使得编程任务明确,在开发之前基本考

前端控制台 JavaScript函数报错 SyntaxError: expected expression, got &#39;;&#39; SyntaxError: expected expression, got &#39;if&#39;

在火狐浏览器下调试时, 页面报错SyntaxError: expected expression, got ';'或者SyntaxError: expected expression, got 'if'等 其实就是js部分某个变量没有赋值到,例如: // 这种echo在前端输出的是空 var test = <?php echo 1 > 0 ? true : false ?>; 在前端js显示的是: var test = ; 注意: 在前端 test = ; 这样的变量没有赋值到就会报错,

抓紧面试前的宝贵时间 快速搞定前端初级JavaScript面试

第1章 课程介绍[说说面试的那些事儿]本章会出几个面试题,分析每道题目设计的知识点,然后总结出一个完整的知识体系.让我们开始 “题目->知识点->解题” 的快乐之旅吧. 第2章 JS基础-变量类型和计算[不会变量,别说你会JS]本章介绍变量的类型和计算的知识点和题目,包括值类型和引用类型区别,类型判断,深拷贝等.变量和类型是一个任何一门语言的基础,不了解的话,会被认为是 JS 语法不过关. 第3章 JS基础-原型和原型链[三座大山之一,必考!!!]本章介绍原型.原型链和 class 相关的知识

快速搞定前端初级JavaScript面试完整版

资源获取链接:点击获取完整教程 抓紧面试前的宝贵时间 快速搞定前端初级JavaScript面试 BAT资深面试官针对时下面试高频考点,帮你解决面试问题.课程不局限于简单地讲解每一个知识点,而是以面试官的角度出发,带你了解前端面试中每个“门道”与“套路”.手把手带你分析考点及解答策略,梳理JS考试体系,帮助前端新人快速通过JS面试部分. 课程紧凑,分秒必争 拒绝题海战术,绝不浪费时间解析典型面试题,分析前端面试核心考点拆解一道题,解决一类题 匠心设计,直击考点 凝聚讲师三年面试课程授课经验结合大量

web项目开发 之 前端规范 --- JavaScript编码规范

JavaScript编码规范 此文严格按照W3C规范和部分实际项目可读性,浏览器加载,性能等众多属性权衡,做出平时前端编码规范文档.供广大web工作者参考并实施,对维护和项目扩展升级都能省时省力. 场景:web前端开发中 一些Javascript的注意事项 和 规格建议: [参考百度资料 和个人一些总结] 1 前言 JavaScript 在百度一直有着广泛的应用,特别是在浏览器端的行为管理.本文档的目标是使 JavaScript 代码风格保持一致,容易被理解和被维护. 虽然本文档是针对 Java