js最基础知识回顾6(变量,预解析,引用,索引)

一、变量

1. 作用域:全局、局部、闭包

2. var a=12;   不加var,会变成全局变量。

3. 全局变量:容易重名,影响性能

4. 局部变量和全局变量重名,局部会屏蔽全局。

5. 给window加东西,是全局的。用途:把封闭空间的东西,变成全局。

(function(){

window.a=12;

alert(a);

})()

二、预解析

1. 系统会把所有变量的声明,放在最上面。只是声明到上面,赋值还在原来的位置。

2. 预解析的作用域:不会脱离原本的作用域。函数中,变量放在函数最上面;全局中,放在程序最上面。

3. 作用域可以突破script:读取一个script--->预解析--->执行--->读取下一个script

<script>

alert(a);//a is not defined

</script>

<script>

var a = 12;

</script>

<script>

alert(a);//a=12

</script>

4. 开始先把变量分配好,避免后面折腾

5. 函数也有预解析

if(num%2==0){

alert(‘偶数‘);

}else{

alert(‘奇数‘);

}

var num=12;

预解析,var num,此处是undefined,所以undefined%2即undefined,为假,所以走else

例子:

aaa();//此处报错 aaa is not a function

var aaa=function(){

alert(1);

}

所以,函数赋值给变量,按照变量的规则走。

三、引用

1. object赋值的时候不会复制,只是两个变量会指向同一块内存。任何东西都是存放在内存中。

var arr=[12,4,3];

var arr2=arr;

arr2.push(6);

alert(arr+‘\n‘+arr2);//都是[12,4,3,6]

2. 如果想解决,通过for循环单独添加。

var arr1=[12,5,3];

var arr2=[];

for(var i=0; i<arr1.length; i++){

arr2.push(arr1[i]);

}

arr2.push(6);                //arr2=[12,4,3,6];

alert(arr1+‘\n‘+arr2);  //arr1=[12,4,3]

四、索引

1. charAt(索引):获取某一位置的字符串;

2.字符串-->编码: charCodeAt(索引):获取某一位置字符串的编码。

a->97    b->98    c->99   z->122   =->61   ?->63    1->49    2->50

3.编码-->字符串: string.fromCharCode(编码)

for(var i=1;i<=10000;i++){

document.write(i+"="+String.fromCharCode(i)+"<br />");

}

4. 中文:4E00~9FA5: 即19968~40869。js中,十六进制用0x

     4E00-->一

打印所有的汉字:

  for(var i=0X4E00;i<=0X9FA5;i++){

    document.write(String.fromCharCode(i)+" ");

  }

5. 使用十六进制表示汉字:alert(‘\u4E00‘)---  一        其中“\”是转义符

6. 所有字符串都有编码,字符串比较按照编码大小排列

加密:

oBtn1.onclick=function(){

var str=oTxt1.value;

var str2="";

for(var i=0;i<str.length;i++){

str2+=String.fromCharCode(str.charCodeAt(i)+5);

}

oTxt2.value=str2;

}

五、 关于比较的问题

(1)字符串比较的是内容,只要文字相同,就相等     a<b    a<z    z>A

(2)数组:属于object类型,是新建的,所以下面的arr1和arr2不相等

var arr1=[12,5];

var arr2=[12,5];

alert(arr1==arr2);   //false

(3)函数:

function aaa(){alert(1);}

function bbb(){alert(1);}

alert(aaa==bbb);  //false;

完整写法:new function();

所以,只要是new出来的,就不相等。

(4)字节长度

字母:1字节       汉字:2个或3个字节    UTF-8格式,占得多3个字节   GB2312--2个字节    可以了解头信息

计算字节长度

var str=‘abc啊‘;
            function getByLon(str,type){
                var res=0;
                for(var i=0;i<str.length;i++){
                    if(str.charAt(i)>=‘\u4e00‘&&str.charAt(i)<=‘\u9fa5‘){
                        if(type==‘utf-8‘){
                            res+=3;
                        }else{res+=2;}
                    }else{res++}
                }
                return res;
            }
            alert(getByLon(str,‘utf-8‘));

六、in——检测属性是否存在

var json={a:12, b:5};

alert(a in json);   //报错   因为 不加引号-->变量

alert(‘c‘ in json);  //false

注意:必须用字符串,只能用于json,不能用于数组

兼容,但是没啥用

用什么检测呢?

var json={a:12, b:5};

if(json.a){

alert(1);

}else{

alert(0);

}

小问题,0是假的,如果恰巧json.a的值是0呢? --弹0

七、异常

(1)什么是异常:程序无法处理的错误

(2)try   catch:防止报错。try中的有问题,catch才会执行

try{alert(getComputedStyle(oBox,false).width)}//可以用则用它;chrome,ff,ie9++;
                                 catch(e){  //e:关于错误的信息;
                                                //补救的代码:
                                                //alert(e.message);//错误的详细信息;
                                        alert(oBox.currentStyle.width) //要么用它;ie系列;
                                    }

try中的代码执行很慢,且不好调试。所以,js中没啥大用。用于应急。

八、表达式

(1)赋值表达式:alert(a=12);   赋值语句本身也有值

(2)连等:alert(a=b=c=5);//5

(3)逗号表达式:听最后一个。且不能跟var 一起使用。

逗号的优先级很低。alert((1,3));//必须加();

if(12,0){ alert(1); }else{ alert(0); }

时间: 2024-11-02 14:15:19

js最基础知识回顾6(变量,预解析,引用,索引)的相关文章

JS基础知识回顾:变量、作用域和内存问题

ECMAScript变量可能包含两种不同数据类型的值:基本类型值和引用类型值. 基本类型值指的是简单的数据段,而引用类型值指的是那些可能由多个值构成的对象. 引用类型的值是保存在内存中的对象,与其他语言不同,JavaScript不允许直接访问内存中的位置,也就是说不能直接操作对象的内存空间. 在操作对象时,实际上是在操作对象的引用而不是实际的对象. 在很多语言中,字符串以对象的形式来表示,因此被认为是引用类型的,ECMAScript放弃了这一传统. 定义基本类型值和引用类型值的方式是类似的:创建

js最基础知识回顾

一.html/css 1. 什么是盒子模型? padding+border+width/height 2. float 浮动 (1)浮动的特性 半脱离文档流 行内变成块  共处一行 能设置宽高 同级元素有浮动,必须全部都浮动 父级宽度不够,子集掉下来 文本环绕  顶对齐 (2)清除浮动? clear:both; clearfix: clear:after{display:block; content:''; clear:both;} clear{zoom:1;} overflow:hidden;

js最基础知识回顾3(字符串拼接,数据类型,变量类型,变量作用域和闭包,运算符,流程控制,)

一.javaScript组成     1.ECMAScript:解释器.翻译 ---------------------------------------------------------几乎没有兼容性问题     2.DOM:Document Object Model --------操作HTML的能力----document--------有一些兼容性问题     3.BOM:Browser Object Model -------------浏览器---------------wind

js最基础知识回顾2(函数传参,操作属性的第二种方式,提取行间事件,操作一组元素,this,焦点问题和鼠标按下抬起,选项卡)

一.函数传参     1.函数传参:参数就是占位符----函数里定不下来的东西 a. var a1=function(){ alert(123); }; function a(f){ // 相当于 f=a1 f(); }; a(a1); b.  function skip(skipPath){  //换肤 var oLink1 = document.getElementById('link1'); oLink1.href=skipPath; } c.   function setStyle(na

js最基础知识回顾6(数组,JSON,getByClass,select,Math对象)

一.数组的相关操作 1. 定义 (1)var arr=[1,'abc',function(){alert(3333);},[333,444]]; (2)var arr=new Array(12,5,8,9);   如果只放一个数字,要设定length (3)[]的性能略高,因为代码短 2. 属性----length(既可以获取,又可以设置)---例子:快速清空数组 var a=[1,2,3,4,5,6,]; a.length=0; alert(a); (1)如果设置的length多于数组的内容,

OO复习--基础知识回顾(变量,控制符)

构造方法 构造方法的方法名必须与类名一样.构造方法没有返回类型,也不能定义为void,在方法名前面不声明方法类型. Java 中局部变量.实例变量.类变量(静态变量) public class Variable{ static int allClicks=0;//类变量 String str="hello world";//实例变量 public void method(){ int i =0;//局部变量 } } public class A{ static int a = 0; /

JS基础知识回顾:引用类型(一)

在ECMAScript中引用类型是一种数据结构,用于将数据和功能组织在一起,而对象时引用类型的一个实例. 尽管ECMAScript从技术上讲是一门面向对象的语言,但它不具备传统的面向对象语言所支持的类和接口等基本结构,所以虽然说引用类型与类看起来想死,但他们并不是相同的概念. 不过引用类型有的时候也可以被称为对象定义,因为他们描述的是一类对象所具有的属性和方法. 新对象是使用new操作符后跟一个构造函数来实现的,构造函数本身就是一个函数,只不过该函数时处于创建新对象的目的而定义的. ECMASc

JS基础知识回顾:ECMAScript的语法(一)

任何语言的核心都必然会描述这门语言最基本的工作原理,而描述的内容通常都要涉及这门语言的语法.操作符.数据类型.内置功能等用于构建复杂解决方案的基本概念. ECMAScript中的一切变量.函数名.操作符都区分大小写. ECMAScript的标识符要符合下列规则:第一个字符必须是字母.下划线或美元符号:其他字符可以是字母.下划线.美元符号或数字. 标识符中的字母也可以包含扩展的ASCII或Unicode字母字符,但是并不推荐. 按照惯例,ECMAScript标识符采用驼峰大小写的格式来书写,尽管没

JS基础知识回顾:引用类型(四)

每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法. 由于函数是对象,因此函数名实际上也是一个指向函数对象的指针,不会与某个函数绑定. 函数的声明有以下三种形式: function sum(num1,num2){return num1+num2;}//利用函数声明语法定义 var sum=function(num1,num2){return num1+num2;}//利用函数表达式定义 var sum=new Function("num1","nu