我的javascript

JavaScript的简介:

1、定义:javascript是一门动态弱类型的解释型编程语言,增强页面动态效果,实现页面与用户之间的实时动态的交互。

javascript是由三部分组成:ECMAScript、DOM、BOM

  • ECMAScript由ECMA-262定义,提供核心语言功能(ECMA是欧洲计算机制造商协会)
  • DOM(Document Object Model)文档对象模型,提供访问和操作网页内容的方法和接口
  • BOM(Browser Object Model)浏览器对象模型,提供与浏览器交互的方法和接口

2、文件的引入:

外部文件引入:

<script type"text/javascript" src="JS文件"></script> 

存在于html的<head>或者<body>标签中。

<script type"text/javascript"> 
    Js代码内容 
</script>

 3、javascript一般放在<body>标签的底部

  • HTML代码从上到下执行,先加载CSS,避免html出现无样式状态;
  • 将JavaScript代码块放在<body>最后,可以让网页尽快的呈现给用户,减少浏览者的等待时间,避免因为JS代码块阻塞网页的呈现。

变量:

需要注意的是:局部变量必须以 var 开头申明,如果不写 var 则为全局变量。

<script type="text/javascript"> 
   
    // 全局变量 
    name = 'mk'; 
   
    function func(){ 
        // 局部变量 
        var age = 18; 
   
        // 全局变量 
        gender = "man" 
    } 
</script> 

注:需要注意变量提升,就是把变量位置放到函数体的最上方。

运算符:

1、算术运算:

需要注意的是

"i++" == " i = i + 1"  先运算再赋值

"++i" == " " 先赋值再计算

 

1> 如果其中一个操作数是对象,则对象会转换为原始值:日期对象通过toString()方法执行转换,其他对象通过valueOf()方法执行转换。如果结果还不是原始值,则再使用toString()方法转换
2> 在进行了对象到原始值的转换后,如果其中一个操作数是字符串的话,另一个操作数也会转换成字符串,进行字符串拼接
3> 两个操作数都将转换成数字或NaN,进行加法操作

 

 

===:表示不光是内容相等,而且类型也相等。

数据类型:

特殊值:

  null  表示一个空的对象指针,长用来描述空值。

  undefined  表示变量没有被定义

1、数字

 

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

 

转换:

 

  • parseInt(..)    将某值转换成整数,不成功则NaN
  • parseFloat(..) 将某值转换成浮点数,不成功则NaN

 

特殊值:

 

  •  NaN,非数字。可以使用 isNaN(num) 来判断。
  • Infinity,无穷大。可以使用 isFinite(num) 来判断。

 

2、字符串:

转移字符

 

\0 空字节
\n 换行
\t 制表
\b 空格
\r 回车
\f 进纸
\\ 斜杠
\' 单引号
\" 双引号

 

3、布尔值:true || false

4、数组:类似于python中的列表

5、math

Math对象是一个静态对象,而不是构造函数。实际上,Math只是一个由Javascript设置的对象命名空间,用于存储数学函数。

作用是执行普通的算数任务。

常量

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方法

语句:

1、条件语句:

if:语句

if(条件){ 
   
    }else if(条件){ 
           
    }else{ 
   
    } 

 

switch语句:

 

switch(name){ 
        case 'nick': 
            age = 18; 
            break; 
        case 'jenny': 
            age = 21; 
            break; 
        default : 
            age = 0; 
    } 

 

 

2、循环语句:for、for in、while、do-while

for循环:

 

var names = ["nick", "jenny"]; 
   
for(var i=0;i<names.length;i++){ 
    console.log(i);    //索引 
    console.log(names[i]); 
} 

 

 

for in循环:

 

var names = ["nick", "jenny"]; 
  
for(var index in names){ 
    console.log(index); 
    console.log(names[index]); 
} 

 while循环:

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

do while循环:

//循环的代码至少执行一次,结果为1 
  
        var num = 0; 
        do { 
            num++; 
        }while (num>10); 

3、lable语句:

label 语句可以理解为跳出任意循环

//输出结果为95

    <script>
        var num = 0;
        for (var i=0;i<10;i++) {
            for (var j=0;j<10;j++) {
                if (i==5 && j==5) {
                    break;
                }
                num++;
            }
        }
        console.log(num);
    </script>
未加label实例
//输出结果为55
//i和j都循环为到5时,跳出了两层循环

    <script>
        var num = 0;
        outPoint:
        for (var i=0;i<10;i++) {
            for (var j=0;j<10;j++) {
                if (i==5 && j==5) {
                    break outPoint;
                }
                num++;
            }
        }
        console.log(num);
    </script>
加label实例

4、异常处理:主动跑出异常 throw Error('xxxx')

try { 
    //这段代码从上往下运行,其中任何一个语句抛出异常该代码块就结束运行 
} 
catch (e) { 
    // 如果try代码块中抛出了异常,catch代码块中的代码就会被执行。 
    //e是一个局部变量,用来指向Error对象或者其他抛出的对象 
} 
finally { 
     //无论上述代码怎么,finally代码块始终会执行 
} 

函数:

在Javascript中函数有三种定义方式:

// 普通函数 
    function func(arg){ 
        return true; 
    } 
            
// 匿名函数 
    var func = function(arg){ 
        return "nick"; 
    } 
    
// 自执行函数 
    (function(arg){ 
        console.log(arg); 
    })('nick') 

函数的参数:

函数传参的个数可以小于实际需传参的个数,没传参的默认为undefined

参数传多默认不起作用

function man(name,age) { 
    console.log(name,age); 
} 
man("nk",18); //nk 18 
man("nk");    //nk undefined 
man("nk",18,19);  //nk 18 

arguments 可接收所有参数,返回一个数组

function man() { 
    console.log(arguments); 
} 
man("nk",18); //["nk", 18] 
man("nk");    //["nk"] 
man("nk",18,19);  //["nk", 18, 19] 

函数的作用域与作用域链:

注意:

  在javascript中,没有块级作用域:

var name = 'nk'; 
        (function Main(){ 
            console.log(name);//undefined 
            if(1){ 
                var name = 'jenny'; 
            } 
            console.log(name);//jenny 
        })(); 
        console.log(name);//nk 
  
//输出结果第一个为undefined 
//声明需提前(Hoisting),在JavaScript引擎“预编译”时进行,函数在被执行之前,会将其中的变量全部声明,而不赋值 

作用域链:

每个构造函数都有一个内部对象指针,指向原型对象,而原型对象也包含一个指向构造函数的指针。如此层层递进,形成作用域链条

var name = 'nk'; 
        function Main() { 
            function F1(){ 
                var name = 'jenny'; 
                console.log(name);//jenny 
            } 
            function F2() { 
                console.log(name);//nk 
            } 
            F1(); 
            F2(); 
        } 
        Main(); 
  
// 从内到外的优先级寻找 
// F2() 的作用域链为 F2()-->Main() 

闭包:

闭包就是能够读取其他函数内部变量的函数

    function f1(){ 
        var n=1; 
        Add=function(){ 
                    n++; 
                }; 
        function f2(){ 
         console.log(n); 
        } 
        return f2; 
        } 
      var result=f1(); 
      result(); //1 
      Add(); 
      result(); //2 
  
//result就是闭包f2函数 
//函数f1中的局部变量n一直保存在内存中,并没有在f1调用后被自动清

闭包使函数中的变量都被保存在内存中,内存消耗大,所以少用闭包,否则会造成网页的性能低,在IE中可能导致内存泄露。

所以在退出函数之前,将不使用的局部变量全部删除

面向对象:

面向对象的三大特性:
  封装:隐藏代码实现的细节,实现代码的模块化
  继承:扩展已经存在的代码模块,实现代码重用
  多态:接口的不同实现方式,实现接口重用

 关键字:

    this  代指此时的对象

    new  创建对象时必须使用

构造函数模式:

function Foo (name,age) { 
    this.Name = name; 
    this.age = age; 
    this.Func = function () { 
        return this.Name + this.age 
    } 
} 
var obj = new Foo("nick",18); 
var ret = obj.Func(); 
console.log(ret); 
var obj2 = new Foo("jenny",21); 

上述模式把同样的函数封装到了不同对象,造成了内存浪费。

原型模式(prototype):

function Foo(name,age) { 
    this.Name = name; 
    this.Age = age; 
} 
Foo.prototype = { 
    GetInfo: function () { 
        var str = " is good"; 
        return this.Name + str; 
    }, 
    Func: function () { 
        return this.Name + this.Age; 
    } 
}; 
var obj = new Foo("nick",18); 
console.log(obj.Name);//nick 
console.log(obj.Age);//18 
var ret = obj.GetInfo(); 
console.log(ret);//nick is good 
var ret2 = obj.Func(); 
console.log(ret2);//nick18 
var obj2 = new Foo("nick",18); 

 所有的构造函数的prototype属性都指向另一个对象(同一块内存地址),这个对象的所有属性和方法,都会被构造函数的实例继承。

Prototype模式的验证方法:

1.  isPrototypeOf() 

用来判断一个对象是否存在于另一个对象的原型链中

Foo.prototype.isPrototypeOf(obj) 
true
Foo.prototype.isPrototypeOf(obj2) 
true 

 2.  hasOwnProperty()

 用来判断某一个对象(不包括原型链)是否具有指定属性。

obj.hasOwnProperty('Name') 
true
obj.hasOwnProperty('Age') 
true 

3. in运算符

 判断某个实例是否具有某个属性

'Name' in obj 
true
'Age' in obj 
true 

 其他:

1、序列化

  • JSON.stringify(obj)   序列化
  • JSON.parse(str)        反序列化

2、转义

  • decodeURI( )                   URl中未转义的字符
  • decodeURIComponent( )   URI组件中的未转义字符
  • encodeURI( )                   URI中的转义字符
  • encodeURIComponent( )   转义URI组件中的字符
  • escape( )                         对字符串转义
  • unescape( )                     给转义字符串解码
  • URIError                         由URl的编码和解码方法抛出

3、eval

JavaScript中的eval既可以运行代码也可以获取返回值

a = eval('1+1'); 
console.log(a); //2 
  • eval() 
  • EvalError   执行字符串中的JavaScript代码

4、正则表达式

var p = /nk/g; 
console.log(p.test('nkjennynk')); // true 
console.log(p.exec('nkjennynk')); // ["nk", index: 0, input: "nkjennynk"] 

 

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

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

匹配模式:

  g:表示全局(global)模式,匹配所有字符串,不会匹配到第一项时停止

  i:表示不区分大小写(case-insensitive)模式

  m:表示多行(multiline)模式,到达一行文本末尾时还会继续查找下一行中是否存在匹配的项

括号分组:

console.log(/(n)k/.exec('nkjenny')); // console.log(/(n)k/.exec('nkjenny')) 
console.log(/(n)k{2}/.exec('nkkjenny')); // ["nkk", "n", "i", index: 0, input: "nkkjenny"] 
元字符         名称              匹配对象
.             点号              单个任意字符(除回车\r、换行\n、行分隔符\u2028和段分隔符\u2029外)
[]            字符组             列出的单个任意字符
[^]           排除型字符组        未列出的单个任意字符
?             问号               匹配0次或1次
*             星号               匹配0交或多次
+             加号               匹配1次或多次
{min,max}     区间量词           匹配至少min次,最多max次
^             脱字符             行的起始位置
$             美元符             行的结束位置
|             竖线               分隔两边的任意一个表达式
()            括号               限制多选结构的范围,标注量词作用的元素,为反向引用捕获文本
\1,\2...      反向引用            匹配之前的第一、第二...组括号内的表达式匹配的文本

匹配规则 

\d     数字,等同于[0-9]
\D     非数字,等同于[^0-9]
\s     空白字符
\S     非空白字符
\w     字母、数字、下划线,等同于[0-9A-Za-z_](汉字不属于\w)
\W     非字母、数字、下划线,等同于[^0-9A-Za-z_]

5、时间处理:

 

时间操作中有两种时间:

  • 时间统一时间
  • 本地时间(东8区)
Date    操作日期和时间的对象
Date.getDate( )    返回一个月中的某一天
Date.getDay( )    返回一周中的某一天
Date.getFullYear( )    返回Date对象的年份字段
Date.getHours( )    返回Date对象的小时字段
Date.getMilliseconds( )    返回Date对象的毫秒字段
Date.getMinutes( )    返回Date对象的分钟字段
Date.getMonth( )    返回Date对象的月份字段
Date.getSeconds( )    返回Date对象的秒字段
Date.getTime( )    返回Date对象的毫秒表示
Date.getTimezoneOffset( )    判断与GMT的时间差
Date.getUTCDate( )    返回该天是一个月的哪一天(世界时)
Date.getUTCDay( )    返回该天是星期几(世界时)
Date.getUTCFullYear( )    返回年份(世界时)
Date.getUTCHours( )    返回Date对象的小时字段(世界时)
Date.getUTCMilliseconds( )    返回Date对象的毫秒字段(世界时)
Date.getUTCMinutes( )    返回Date对象的分钟字段(世界时)
Date.getUTCMonth( )    返回Date对象的月份(世界时)
Date.getUTCSeconds( )    返回Date对象的秒字段(世界时)
Date.getYear( )    返回Date对象的年份字段(世界时)
Date.parse( )    解析日期/时间字符串
Date.setDate( )    设置一个月的某一天
Date.setFullYear( )    设置年份,也可以设置月份和天
Date.setHours( )    设置Date对象的小时字段、分钟字段、秒字段和毫秒字段
Date.setMilliseconds( )    设置Date对象的毫秒字段
Date.setMinutes( )    设置Date对象的分钟字段和秒字段
Date.setMonth( )    设置Date对象的月份字段和天字段
Date.setSeconds( )    设置Date对象的秒字段和毫秒字段
Date.setTime( )    以毫秒设置Date对象
Date.setUTCDate( )    设置一个月中的某一天(世界时)
Date.setUTCFullYear( )    设置年份、月份和天(世界时)
Date.setUTCHours( )    设置Date对象的小时字段、分钟字段、秒字段和毫秒字段(世界时)
Date.setUTCMilliseconds( )    设置Date对象的毫秒字段(世界时)
Date.setUTCMinutes( )    设置Date对象的分钟字段和秒字段(世界时)
Date.setUTCMonth( )    设置Date对象的月份字段和天数字段(世界时)
Date.setUTCSeconds( )    设置Date对象的秒字段和毫秒字段(世界时)
Date.setYear( )    设置Date对象的年份字段
Date.toDateString( )    返回Date对象日期部分作为字符串
Date.toGMTString( )    将Date转换为世界时字符串
Date.toLocaleDateString( )    回Date对象的日期部分作为本地已格式化的字符串
Date.toLocaleString( )    将Date转换为本地已格式化的字符串
Date.toLocaleTimeString( )    返回Date对象的时间部分作为本地已格式化的字符串
Date.toString( )    将Date转换为字符串
Date.toTimeString( )    返回Date对象日期部分作为字符串
Date.toUTCString( )    将Date转换为字符串(世界时)
Date.UTC( )    将Date规范转换成毫秒数
Date.valueOf( )    将Date转换成毫秒表示
Date 方法

 

posted @ 2016-07-17 10:38  还能和老板谈感情吗  阅读(206)  评论(0编辑  收藏  举报