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,空字符串,null(空对象),undefined

8.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]);
   }

深入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;
});

你可能感兴趣的:(JS学习笔记(二))