javaScript权威指南学习笔记

本文深入讲解JavaScript的基础知识,包括变量作用域、数据类型、数组与对象的特性、运算符及函数使用技巧等内容,并通过实例帮助读者更好地理解这些概念。

1.在html中标签和属性名的命名规范?在javascript中?

 在html中,标签和属性名可以大小写,建议小写。
 在javascript中,一定要小写。

2.javascript中的数组和java的中的数组表现形式的区别?

在java中数组有三种表现形式,分别是
1.int[] arr = new int[2];arr[0]=1;arr[1]=2;     
2. int[] arr={1,2,3};
3. int[] arr =new int[]{1,2,3}; //不可在前面多加个数,画蛇添足
- 在javascript中数组形式是
1.var arr = new Array(10);//指定数组个数是10个
2.var arr = new Array(5,2,3,4,"hello world");
3.var arr = [1,3,3,4];

3.标识符规范

开头必须是字母,下划线,美元。后面字符随意

4.在return break continue 换行了会怎样?还有一组
是 “++ ” “- -”

比如 return  
     true;
就会变成 return ; true;

5.javascript的数据类型:原始类型primitive type 和 object type

原始类型:数字,字符串,布尔值
还有两个特殊的原始值:null 和 underfined

5.对象的特征:属性的property的集合

1.global object 全局对象  
2. array(带编号的值的有序集合) 
3. 还有一个特殊对象 ---函数

6.全局变量的定义

不在任何函数范围内声明的变量称之为全局变量

7.javascript中的数字

1.不分整数和浮点,均用浮点数表示
2.表示范围是64位,实际上用的是32位。

8.null 和underfined理解

1.==相比是相等的。且都是假值
2.null表示是"无值的"
3.underfined 表示是" 未初始化"   
4.typeof null 是object
5.typeof underfined是 underfined
6.null和underfined都不包含属性和方法

9. 如何理解String(“abc”) Number(12) Boolean() 包装对象

通过Number() 和Boolean() 构造函数创建一个临时变量,这些方法的调用均来自于临时对象。null 和undefined 没有包装对象,访问他们的属性会造成一个类型错误。
null 和 underfined 没有包装对象,字符串、数字 、布尔值有包装对象
用== 比较原始值和包装对象 是相等
用===相比较是不等的
可以用typeof相比较 就明显知道了

var s="test";
s.len=4;
var t = s.len;

//t=>underfined

 分析:第二行代码创建一个临时字符串对象,并给其len属性赋值为4.随即销毁这个对象。
 第三行通过原始的(没有被修改过)字符串值创建一个新字符串对象,尝试读取其len值,这个属性自然不存在,表达式结果为underfined。

总结:
存取字符串,数字或布尔值的属性是创建的临时对象称作包装对象。
字符串。数值 布尔值的属性都是只读的,不能给他们定义新属性

10.不可变的原始值和可变的对象引用值是否可以改变 ?

1.原始值是不可变的。字符串 数字 布尔值 null underfined
答:对数值 和布尔值显然如此,但是 字符串却 常会迷惑他人。以为会根据索引值改变某个字符。但其实返回的是新的字符串。
2.对象的值是可以改变的。
var arr=[1,2,3];
arr[0]=1;//修改其中的值
arr[3]=4;//新增一个属性

11、原始值和引用对象的是如何比较相等的?

原始值的比较值的比较,只有当他们值相等时才相等。
对象引用时比较是否指向同一个对象,是同一个才相等。

12.两个单独的对象是否一样?

var a=[],b=[];//两个单独的空对象
a===b; //=>false 两个单独的对象永不相等
var p={a:0,b:1},k={a:0,b:1};
p===k; //=>false 两个单独的对象永不相等

13.javascript类型转化

这里写图片描述
14.直接用String() Boolean() 和Number() 会发生什么?

当不使用new来调用这些函数是,他们会作为类型转化函数,按照上面表格进行转化。

15.对象转为原始值

1.所有对象转为布尔值都是true 见上图
2.对象转为字符串
 先看是否有toString()方法。返回是原始值,转为字符串形式
 如果没有就调用valueof()方法,返回是原始值,转为字符串形式
 都没有,抛出一个类型错误异常。
3.对象转为数字
  先看是否有valueof() 返回是原始值,转为数字形式
  如果有toString() 返回是原始值,转为数字形式
  否则,抛出一个类型错误异常。

16.变量作用域问题?

     全局变量:拥有全局作用域,在javascript代码中的任何地方都是有定义的。
     局部变量:函数体内包括函数参数

17。全局变量与局部变量优先级比较?

    在函数体内,局部变量的优先级高于全局变量,即全局变量会被局部变量覆盖。
    看一下代码
<script>
    window.onload=function (argument) {
        var scope="global";
        function f(){
            console.log(scope); //underfined
            var scope ="hello";
            console.log(scope);
        }
        f();
    }   
    </script>

咋一看,以为第一行会输出global。结果却输出了underfined。这个为什么呢?
明明有个全局变量已经定义初始化了,为什么不能输出scope的值?
难道是因为下面有个局部变量名跟全局变量名重合了,导致了被覆盖了吗?
可是代码不是还没执行到var scope=“hello”;
怎么就会覆盖呢?
这个问题答案就是下面一个知识点呢?

18.函数作用域和声明提前

    上面讲到局部变量的优先级高于全局变量,还有一个就是,在函数体内,不管在哪里声明了变量,该变量就会自动爬到了函数顶端,也就是说,即使你在函数底部声明变量,该变量也会自动跑到了函数的顶端处,只是还未初始化,等到执行到了定义的地方才会初始化。这个过程叫做声明提前。
<script>
    window.onload=function (argument) {
        var scope="global";
        function f(){
            console.log(scope); //underfined
            var scope ="hello";
            console.log(scope);
        }
        f();
    }   
    </script>

这样就明白 了,原来在函数体内,也定义了一个变量scope,该变量自动提升到了函数顶端,但是未初始化,根据局部变量优先级高于全局变量,所以第一个 输出就是underfined。

19.作用域链

定义:每一段javascript代码都有与之关联的作用域链。这个作用域链式一个对象链表或者链表,这组对象中定义了这段代码“作用域”中的变量。
    在一个不包含嵌套的函数体内,作用域链上有两个对象,一个是定义了函数参数和局部变量的对象,另一个是全局对象。
    在javascript中最顶层代码中,作用域链有一个对象。

20.操作符

按位与 &   
两个都是1才是1
按位或 |
    有一个为1 就为1
按位异或
     不一样才为1
 按位非~
    每一位都取反
左移  <<
    7<<2 =28 右边补零
 右移 >>
     28>>2=7
无符号 >>>
  左边总是填补0

21.in操作符

in 操作符希望左边是字符串或可以转为字符串,右边是对象,如果左边是右边对象的一个属性,则返回true。

22.instanceof

instanceof希望左边是一个对象,右边是标识对象的类。

23.创建对象

1.对象直接量
 var p={};
2.用new 创建对象
 var dt = new Date();

24.原型

每一个javascript对象(null)都会有一个原型对象相关联
可以通过 Object.prototype 获得对原型对象的引用

25.属性getter setter

var p={

get A(){return a}
set A(){a=3};
};

26.如何获得自有属性的描述

Object.getOwnPropertyDescriptor()
eg:
Object.getOwnPropertyDescriptor({},"toString")

27.数组方法

var a =[1,2,3];
1.a.join("-");//1-2-3
2.a.reverse()
3.a.sort()//没有参数按字母表排序
    如何按照想要的方式进行排序呢?

如果传入的第一个参数应该在前面,那么就要返回一个小于0的数值
如果传入的第一个参数应该在后面,那么就要返回一个大于0的数
总结:
学校里正常排队,都是矮的站前面,高的站后面,矮的减去高的不就是负数嘛。

var arr=["Hdn","ant","sle","dh"];
        arr.sort(function(s,t){
            var a = s.toLowerCase();
            var b = t.toLowerCase();
            if(a>b) return 1;
            if(a<b) return -1;
            else
                return 0;

        });
        console.log(arr);
        // ["ant", "dh", "Hdn", "sle"]
var arr=[1,23,45,3,4];
        arr.sort(function(a,b){
            if(a<b)  return 1;
            if(a<=b ) return 0;
        });
        console.log(arr.join("-"));
        //45-23-4-3-1
4.concat()
5.slice() 剪切包含了第一个参数,不包含了第二个参数 -1代表了数组的最后一个数 
不是修改调用的数组
[start,end)
6.splice() 插入或删除元素的通用办法,返回的是删除掉的元素
    1.删除
    [start,num]
    2.插入 分为先删除再插入,开始位置一样
    [start,num,s,s)
会修改调用的数组
7.push和pop
数组当作栈来用
push数组最后添加一个或多个
pop数组后最后删除一个
8.shift 和 unshift
数组当作队列来用
shift 数组第一个删除
unshift 数组第一个添加一个或多个
9.forEach
    a.forEach(function(i))
10.map
    a.map(function(v,i,arr))
11.filter
    a.filter(function(i))
12.some
    a.some(function(x))  //返回true or false
13.every
    a.every(function(x)) //返回布尔值
14.reduce
15.reduceof
16.indexof
17.lastIndexof
18.Array.isArray()

29.函数

如果函数挂载到一个对象上,作为一个对象的属性,就称它为对象的方法。当通过对象的方法调用这个函数时,该对象就是此次调用的上下文(context)。也就是该函数的this的值。

30.callee

指代当前正在执行的函数

31.caller

非标准的,指代当前正在调用的函数的函数,可以访问调用栈

32.arguments

在函数体内,arguments是指向实参对象的引用,实参对象是类数组对象,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值