JAVASCRIPT

xiaoxiao2021-02-28  114

JAVASCRIPT————一个面向对象的跨平台脚本语言。 什么是面相对象?  从最基本的层面上来说,对象是一系列属性的集合,对象实现了数据和操作的结合,使数据和操作封装于对象的统一体中 面向对象是一种对现实世界理解和抽象的方法 什么是跨平台?  什么是脚本?  HTML文件必须在浏览器里执行 JS文件必须嵌入到HTML文件里才能执行 凡是不能独立执行需要依赖其他程序的,通常都叫做脚本。 JS的特点: 1、松散性    (弱类型语言) 2、面相对象   (但没有类的概念) 3、继承 4、没有多态 JS的发展历史: 1995, Netscape    LiveScript  目的: 表单验证 ------为了减轻服务器的负担 1996,微软, JScript 1997,  ECMA(欧洲计算机制造商协会)----->TC39 第一个标准: ECMA-262 主流浏览器  Firefox\Chrome\Safari\Opera javascript和java的关系,没有关系,但JS的结构设计上借鉴了很多JAVA的内容 标准的重要性: ECMA组成: 第一个程序的编写: document.write("\"你的报酬不是和你的劳动成正比,而是和你的劳动的不可替代性成正比。\"————尹涛"); //常见的转义字符 document.write("\t");  //tab键 document.write("\n");  //换行 document.write("\\");  //表示输出一个  \ document.write("\"");  //表示输出一个  "  javascript中的注释 js中的{}与; js的解释器在解释不以结束的一行语句,解释器会先去判断后边的代码是否能与当前行 的代码放一起执行,如果能执行就把两行代码合并,如果不能合并就会加上 ,若还不能执行,就报错。这时就会出现一种情况,如果第二行的代码是以 { 开头的,js解释器可能就会将上下行的代码解释为一个 函数 ,因此很多的js代码开头都会以 开头,为的就是避免这种情况(比如:js多个文件压缩时,代码合并)的发生。 例外1:当js在解释时遇到 break,return,continue,都不会与下行代码合并执行,因此在返回值时:如return a;时,一定要将语句与return放在一行,否则return将直接退出程序(不会返回a) 例外2:当遇到--  ,  ++时仅会与下一行的语句合并执行 a=1 b=2 a ++ b //那么结果a与b分别是多少 //a=1 //b=3建议: ; 与 }  该写就写,不要省略 引入方式: 1  嵌入页面 <script type="text/javascript">     //............. </script> 2 外部文件 (在引用了外部文件的情况下,在标签里写js代码是无效的)     <script src="004.js">         document.write("这句代码无法执行!");     </script> 变量:   var a  = 100; 数据类型:(对象类型!) 第一种看法: number ---->  整数、浮点数 string  字符串 boolean 布尔类型(boole,开创了逻辑学与数学的结合) undefined   对于JS来讲,一个变量如果没有赋值,不能确定类型,类型就是undefined object  对象类型 (null的类型也是object) function 函数类型 第二种看法: 基础数据类型(原始数据类型、不可改变数据类型): number  string  boolean undefined  null 复杂数据类型://由属性及属性值构成的无序列表的合集 object 对象类型 基础数据类型进行比较是对其值进行比较 复杂类型(对象)比较是对引用进行比较 基础数据类型与复杂数据类型的区别: 1、复杂数据类型(对象)有属性和方法(方法本质是一个特殊的属性) 2、复杂数据类型(对象)是可以改变的, 基础数据类型是不能改变的,如下图: a.length时a被转为对象类型,执行后被浏览器回收,不生效 原始值 存储在栈(stack)中的简单数据段,也就是说,它们的值直接存储在变量访问的位置。(js中的valueOf() 引用值 存储在堆(heap)中的对象,也就是说,存储在变量处的值是一个指针(point),指向存储对象的内存处 数据类型的转换: 对象转字符串类型:先调 toString()方法,然后再调valueOf()方法 对象转数字类型:先调 valueOf() 方法,然后再调 toString() 方法 对象转原始值:大多数情况下,先调 valueOf()方法,然后再调toString()方法;Date对象直接调用toString方法; 举例如下: 两个空数组相加即为对象转原始值的情况: [] + []  //结果为空串"",在这个过程中先调用valueOf()方法,返回的数组的原始值还是一个数组,再调用toString()方法,即为:"" + "" =""         [1,2] + 1 即为对象转数字的情况:[1,2] 先调用valueOf(),返回的还是数字本身,在调用toString(),返回字符串"1,2",则 "1,2" + 1 ="1,21" 同理,1 + {a:1}   //  "1[object Object]"      但是{a:1} +1   // 1,  这是因为js在解释代码时遇到{}会认为是一个代码块(代码区域),{a:1}已经结束的代码块 因此相当于原式=      +1   //  1    对象的分类: 内部对象:错误对象;常用对象(8个:);内置对象:grobal ,Math,JSON,特点:使用时不用new操作符 数组对象: 自定义对象: undefined和null的区别 相同点:都表示无,都没有方法,Boolean(undefined | null) = false 不同点: 1、null是一个关键字,而undefined不是(因此可以作为变量名) 2、 typeof undefined//undefined       typeof null //object 3、null 本质是一个空的对象,而undefined本质是window的一个属性,它是window已经定义了的属性,只不过它的值为未定义,当一个变量被定义为undefined看似没有意义,但对于某些场景对性能 4、Number(null)             //0       Number(undefined)  //NaN 建议: 1、在声明一个变量一定要赋值时(或定义一个对象的某个属性值时),使用 null 2、检测某个值是否存在建议使用 ===undefined,判断某个值是否为空时使用==null(包含着隐性转换) 如:判断参数是否传入、某个属性(方法)是否存在 使用 ===undefined Boolean: 在js的数据类型进行Boolean类型转换时、能被转换为 false 的有六种: 0-0NaNundefinednull""(空字符串)   注意:object(空对象,如:空数组) Boolean转换为true Number(true) //1   Number(false)//0 Number: js中的0.1+0.2 != 0.3 这是因为计算机在计算时是转为二进制计算,0.1转为二进制无法在小数点后52位表示 完整,因此产生误差。 NaN 是一个特殊数字,当变量无法进行计算得出结果的时候,那么久会出现NaN   全称:  Not a Number typeof NaN  //number     NaN==NaN   //false NaN是js中唯一一个不等于其本身的数据类型,因此也可以利用这点来判断某数据是否为NaN NaN 不等于 NaN   ,即 (NaN==NaN)=false  判断一个变量是否是数字时可以用函数 isNaN(a)若a不是一个数字返回true若是返回false String: 一般来说,js中只有对象可以使用属性和方法,在js的解析器中遇到.或[]时,会将前边的表达式尝试 转化为对象类型,这也是为什么基础数据类型中string能够访问length的原因,如:var a="abc"; a.length   ; 但如果转化为对象失败则会报错,这也是为什么undefined 和null不能使用属性和方法的原因(高版本的某些 浏览器会将undefined、null转为空对象) Number("")    //0 变量的定义: 使用一个没有被var定义过的变量,会报错! var a ;  //在编译这条语句时,js并没有严格的去规定a的类型,   typeof a //只有当a被使用时才真的去识别a的类型 使用var定义的是局部变量;不使用var定义的是全局变量 var message = "hi"        ,found = false      ,age = 29; //建议将逗号写前边,避免遗忘 使用var变量与不使用var的区别? 1、使用var定义的是局部变量,不使用var定义的是全局变量。本质:使用var定义的是一个变量,其 作用域是当前函数。不使用var定义的,严格的来说是给window定义了一个“全局的”属性(js作用域链无法找到这个变量,追溯到window(根)对象),而不是变量,window是全局对象,自然其属性也是全局的; 2、使用var定义的变量不可以用delete删除,不使用var定义的可以被delete删除。本质:定义的变量是不能被删除的。对象是可以改变的,对象上边的属性是可以删除的,不使用var定义的变量等于是window的一个属性,自然就可以被删除。 3、使用var定义的变量会声明提升,不使用var定义的不会被提升;对象是属性及属性值的无序列表的合集,因此不使用var定义的变量(window属性),其声明提不提升也就没有意义了。 typeof ------>查看一个变量的类型 命名规则: 1  只能包含 数字、字母、下划线、$ 2  不可以 用数字开头(一般以字母打头,这里的字母不仅局限于26个英文字母,还包括各国的语言,    比如:var 变量=1;但不推荐) 3 JavaScript中的变量命名是区分大小写的 JavaScript中的操作符:(API:http://www.w3school.com.cn/js/pro_js_operators_unary.asp) 一元操作符: 一元 + ,将后续的表达式转化为数字,小技巧:将一个类型转为number类型  +tmp (Number(tmp));; 一元 - ,将后续表达式转为数字后取负数; ++ 递增 -- 递减 ,分前置和后置,前置先递增(或递减)再执行当前表达式,后置先执行当前表达式再递增(或递减); typeof  其后括号可写可不写,其不是一个函数; void ; delete;  一元 !,将后续表达式转为Boolean类型取反,小技巧:将一个类型转为Boolean类型  !!tmp (Boolean(tmp)); 二元操作符: *、/、- 将两边表达式转为数字,然后进行计算 % 取余 二元+,当遇到某一边是字符串时进行"拼接" , 如:数字转字符串 123 + ""     String(123)                     两侧是数字则加法,(更偏向字符串操作) 当boolean、undefined、null进行混合运算时,都会转成数字进行计算 false - null  //  0 - 0 =0 undefined - null// NaN - 0 =NaN undefined + true // NaN + 1=NaN 逻辑运算符: && 且,  || 或,   ! 非, 关系运算符:   //更偏向数字  > <   >=  <=   ==  !=   ===  !=== 关系运算符某一边出现数字,则都将转为number运算;若两端为string,则是对字符串的编码进行的比较 赋值运算: =+=  -= *= /+ 运算符: 数学运算、赋值运算、逻辑运算、关系运算 浮点数的运算  ------ 0.1+0.2 为什么不等于0.3??? 这是由于计算机在运算的时候都是将变量转化为二进制,而小数转化为二进制时并不能很好的表示,会有一个循环,因而结果 解决方案:   首先将浮点数转为整数,进行运算,再除以相应的位数再转回十进制时会产生误差。 强制类型转换: 1  Number()函数     只针对 纯数字内容的字符串转换有效,且其相对于parseInt、parseFloat转化的范围更大(包括int  float...) 2  parseInt()函数     可用于取整操作;转化字符串时,转化第一个非数字字符前的数字,如parseInt(“123abc123”)=123 3  parseFloat()函数     转化为浮点数; 位运算: var a = 3&5;  //对数字进行按位与运算 /**             0000 0011             0000 0101             0000 0001  与   1             0000 0111  或   7              0000 0110  异或 6         */ var d = a<<2;  //移位--- 左移两位 var d = a>>3;  //0 进制问题: 十进制、八进制、十六进制 var a = 99; var b = 072; 进制转换----> toString(进制数) var a = 072;  //八进制      58 var b = 0xAF; //十六进制    175 alert(a.toString(16));   //3a    (不能为具体数字,只能是变量).toString() var str = "3a"; parseInt(str, 16);   //第二个参数,指定字符串的进制形式 程序的三大结构:顺序结构、选择结构、循环结构 if  -- else       非布尔类型的条件判断 if( 2 )   number类型   ------>所有的非0数字代表  true  ,    0代表false if("abc")  string类型   -------> 所有的非空字符串都代表  true, "" 代表false if(obj)   object类型     -------->所有的非null的对象都代表true,null代表false if(undefined)              -------> 代表false, if(NaN)                        --------> 代表false if( function )              ---------> 如果函数存在,代表true   switch var num = 3; switch(num) {     default : alert("不知道!"); break;  //这里也需要break     case 1 : alert("星期一"); break;     case 2 : alert("星期二"); break; } document.wirte() 会覆盖页面原有的内容,因此我们平时测试,都会将信息输出到控制台  console.log(xxxxxx);
转载请注明原文地址: https://www.6miu.com/read-83032.html

最新回复(0)