JS学习笔记(二)

1.Javascript组成

ECMAScript:通过ECMA-262标准化的脚本程序设计语言,扮演人与计算机之间翻译的角色,提供JS基本功能。一般叫解释器。
DOM:document object model,赋予JS操作HTML的能力
BOM:Browser object model,浏览器对象模型,跟浏览器相关的操作window
ECMA简单,几乎没有兼容性问题;DOM兼容性一般;BOM完全不兼容

2.变量类型

number,string,boolean,function,object,undefined
变量本身没有类型,关键是赋予它什么;可以通过typeof查找
<script>
        var a=12;
        // alert(typeof a);//number
        var b='abcd';
        //alert(typeof b);//string
        var c=true;
        //alert(typeof c);//boolean
        var d=function(){};
        //alert(typeof d);//function
        var e=document;
        //alert(typeof e);//object
        var f;
        //alert(typeof f);//undefined
    </script>
一个变量应该只存放一种类型的数据;

显式类型转换,如加法:字符串转数字——a是数字需要与别的相加时,  parseInt(a);(一遇到非数字字符则停止;结果是整数;
如果都不是数字,则出现NaN-Not a number)parseFloat(a)转小数;
小程序——秒转时间:`var s=133;alert(parseInt(s/60)+'分'+s%60+'秒');`


关于NaN:NaN与NaN不相等;判断是否是NaN:函数isNaN(a),结果为1或0;
(计算机加号的作用:数字相加、字符串连接)

3.变量的作用域和闭包

全局变量:定义在函数之外
局部变量:只能在定义它的函数内部使用
闭包:闭包是可以包含自由(未绑定到特定对象)变量的代码块,这些变量是在定义代码块的环境中定义(局部变量),简单来说就是:
子函数可以使用父函数的局部变量
1,闭包外层是个函数.
2,闭包内部都有函数.
3,闭包会return内部函数.
4,闭包返回的函数内部不能有return.(因为这样就真的结束了)
5,执行闭包后,闭包内部变量会存在,而闭包内部函数的内部变量不会存在.

闭包的应用场景
1、保护函数内的变量安全。以最开始的例子为例,函数aaa中a只有函数bbb才能访问,而无法通过其他途径访问到,因此保护了a的安全性。
2、在内存中维持一个变量。依然如前例,由于闭包,函数aaa中a的一直存在于内存中
    <script>
        function aaa(){       //父函数
            var a=12;
            function bbb(){   //子函数
                alert(a);        
            }
            bbb();
        }
    </script>

4.变量命名规范

类型前缀+首字母大写(函数只首字母大写就可以)

这里写图片描述

5.switch

类似于if,当判断多个条件时常用switch。
switch(var){
    case1:
         语句1breakcase2:
         语句2breakdefault:
         语句n;
}

6.三目运算符

条件?语句1:语句2;
a%2==0?alert('双数'):alert('单数');

7.if 里的真假

 真:true,非0数字,非空字符串,空格,document,数组(非空对象)
 假:false,0,NaN,空字符串,null(空对象),undefined

8.字符串方法:
(1)charAt()方法可返回指定位置的字符。返回的字符是长度为 1 的字符串。

语法:stringObject.charAt(index)
注意:1.字符串中第一个字符的下标是 0。最后一个字符的下标为字符串长度减一(stringObject.length-1)。
     2.如果参数 index 不在 0 与 stringObject.length-1 之间,该方法将返回一个空字符串。
     3.一个空格也算一个字符。

(2)split() 方法将字符串分割为字符串数组,并返回此数组。

语法:stringObject.split(separator,limit) separator指定的地方分割,常见的有“.”,"-"," "(每个字符都分割),limit分割次数

(3)substring() 方法用于提取字符串中介于两个指定下标之间的字符。

语法:stringObject.substring(starPos,stopPos) 开始的位置和结束的位置 
var mystr="Hello World!"
document.write(mystr.substring(6) + "<br />");//World!
document.write(mystr.substring(0,5));//Hello

(4)substr() 方法从字符串中提取从 startPos位置开始的指定数目的字符串。

语法:stringObject.substr(startPos,length)

9.Json(重要)

JSON的全称是”JavaScript Object Notation”,意思是JavaScript对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式,用来存储数据。
语法规则:数据在键值对中;数据由逗号分隔
        花括号保存对象;方括号保存数组
名称/值对:key1:value1,
var obj = {
            1: "value1",
            "2": "value2",
            count: 3,
            person: [ //数组结构JSON对象,可以嵌套使用
                        {
                            id: 1,
                            name: "张三"
                        },
                        {
                            id: 2,
                            name: "李四"
                        }
                   ],
            object: { //对象结构JSON对象
                id: 1,
                msg: "对象里的对象"    
            }
        };
从JSON中读数据:
    function ReadJSON() { 
       alert(obj.person[0].name); //或者alert(obj.person[0] ["name"])
       alert(obj.object.msg); //或者alert(obj.object["msg"])
        }
向JSON中写数据:
    function Add() { 
            //往JSON对象中增加了一条记录
            obj.sex= "男" //或者obj["sex"]="男"
        }
修改JSON中的数据:
   function Update() {
            obj.count = 10; //或obj["count"]=10
        }
注意:JSON没有length,实现Json循环的方法(数组的第二种循环方法),只JSON用这个循环方法:
forvar i in person)
   {
     aler('第'+i+'个东西'+person[i]);
   }

10.访问对象属性的点表示法和方括号表示法

alert(person.name);
alert(person["name"]);

方括号语法的主要优点是可以通过变量来访问属性,以及属性名中包含会导致语法错误的字符比如空格:

var pName="name";
alert(person[pName]);//相当于person["name"]

通常,除非必须使用变量来访问属性,否则我们建议用点表示法
深入Javascript

1.函数返回值return

 函数返回值一次只能返回一个;
 一个函数尽量只返回一种类型的值;
 a=2,b=3时 return a+b 就是5;

2.函数传参

 arguments:可变参、不定参,储存参数的数组
<script>
    function sum(){                         // 例一:求和
         alert(arguments.length);
         alert(arguments[0]);
         var result=0;
         for(var i=0;i<arguments.length;i++)
             {
              result+=arguments[i];
             }
        }
    alert(sum(12,4,5));
</script>
<script>                            //css函数
function css(object,name,value)             
{
  if(arguments.length==2)
  {return object.sytle[name];}
  if(arguments.length==3)
  {obj.style[name]=value;}
}
window.onload=function(){
    var oDiv=documents.getElementsById('div1')
    alert(css(oDiv,'width'));
    css(oDiv,'background','green');
}
</script>

3.获取非行间样式

只能获取样式,不能设置样式。
<style>
#div1 {width:200px;heigth:200px;}
<style>
<script>                        //获取非行间样式
window.onload=fuction(){
var oDiv=document.getElementById('div1');
//alert(oDiv.currentStyle.width);  //只兼容IE
//alert(getComputedStyle(oDiv,null).width);//Chrom,FF,IE下不支持
if (oDiv.currentStyle){alert(oDiv.currentStyle.width);}
else{alert(getComputedStyle(oDiv,null).width);}
}
</script>

封装成函数包:

<script>
function getStyle(obj,name){
        if(obj.currentStyle)
                {
                return obj.currentStyle[name];
                }
        else    {
                return getComputedStyle(obj,null)[name];}
                }
</script>
注意单一样式(width,height)和复合样式(background,margin),复合样式要写出特定样式(background-color)。

4.数组基础

数组的属性:length,既可以获取又可以设置,如清空数组:将length设置为0;
数组的添加和删除:push()在数组的末尾添加;pop()在尾部删除、shift()删除头部;unshift()从头部添加;splice从中间添加或删除。
splice删除:splice(起点,长度);splice添加:splice(起点,长度,元素);替换,先删除后添加
var arr=[1,2,3,4,5,6];
//arr.splice(2,3);   //起点是下标为2的元素是3,arr=[1,2,6]
//arr.splice(2,0,'a','b','c');//在下标为2的元素插入arr=[1,2,'a','b','c',3,4,5,6]
arr.splice(2,2,'a','b');//arr=[1,2,'a','b',5,6]
数组链接concat:a.concat(b);
连接数组元素join:arr.join('符号');AJAX链接网址
数组排序sort:只认识字符串,sort(), 如果是数字:
arr.sort(function(n1,n2){
            retun n1-n2;
});

5.数值转换

有3个函数可以把非数值的转换为数值:Number(),parseInt(),和parseFloat()
Number()可以用于任何数据类型,而另外两个函数专门把字符串转换成数值
Number()函数的转换规则如下:
(1)Boolean值true、false分别转换为1,0
(2)数字值知识简单传入,返回
(3)null,返回0
(4)undefined返回NaN
(5)字符串:
   只包含数字,则将其转换为十进制数值,前导零会忽略
   字符串中浮点格式,则将其转换为对应的浮点数值
   字符中包含有效的16进制,将其转换为相同大小的十进制
   如果字符串是空“”,则返回0
   如果字符串含上述格式外的字符,返回NaN
(6)如果是对象,则调用对象的valueOf()方法,然后按照前面规则返回,如果转换的结果是NaN,则调用toString()的方法,然后再依次按照字符串返回规则

由于Number()函数在转换字符串的适合比较复杂,多用parseInt()函数。
parseInt()函数忽略字符串前面的空格,直至找到第一个非空格字符,如果第一个字符不是数字字符或者负号, parseInt()就会返回NaN。
如果第一个字符是数字,会继续解析第二个字符,直到遇到非数字字符。浮点型的小数点并不是有效的数字字符,所以浮点型会保留整数部分
注意:ECMAscript5 Javascript引擎中,parseInt()不具有解析八进制的能力,前导零会认为无效。ECMAscript3Javascript就可以
为了消除parseInt()可能导致的上述困惑,可以为这个函数提供第二个参数:转换时使用的基数(即多少进制)
var num=parseInt("0xAF",16);//175
  parseFloat()只解析十进制,前导零会忽略,并且字符串中的第一个小数点是有效的。

6.for-in语句

语法:for(property in expression) statement
for-in语句是一种精准的迭代语句,可以用来枚举对象的属性。

for(var propName in window){
           document.write(propName);
}

建议在使用for-in循环之前,先检测确认该对象的值是不是null或undefined

var num=0;

outermost:
for(var i=0;i<10;i++){
    for(var j=0;j<10;j++){
       if(i==)
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值