html的学习笔记,学习使用。HTML学习 因为学了一半,停了,所以笔记前后详细程度不同。参考课程尚硅谷、DasAutoooo目录HTML学习 1.学习前准备2.HTML入门2.1什么是HTML 2.
顺晟科技
2021-06-16 10:58:13
302
基元值是存储在堆栈中的简单数据段,即它们的值直接存储在变量的访问位置。(ECMAScript有五种原始类型:Undefined、Null、Boolean、Number和String。)
引用值是存储在堆中的对象,这意味着存储的值是指向存储对象的内存的点。(对象,数组函数是引用类型)
数字转换字符串:
var i=138//三种方法var S1=I“”;var S2=String(I);var S3=I . ToString();console . log(type of(I));//number console . log(type of(S1));//stringconsole . log(type of(S2));//stringconsole . log(type of(S3));//string//二进制、八进制和十六进制var S4=I . tostring(2);var S5=I . ToString(8);var S6=I . ToString(16);console . log(S4);//10001010 console . log(S5);//212 con sole . log(S6);//8a
字符串转换号:
var s='22岁';var I=s-0;//注意:字符串加0会导致字符串连接var j=Number(I);var k=ParSeint(s);var l=ParseFloat(s);console . log(type of(s));//string console . log(type of(I));//number console . log(type of(j));//编号
ParseInt和parseFloat可以从字符串的开头转换并返回任何数字,忽略或丢弃非数字部分。ParseInt只截取整数,而parseFloat截取整数和浮点数。如果ParseInt以0x或0X开头,它会将其解释为十六进制数。
字符串链接编号:
var longString='这是故事,一个叫bingdian的人写的'
Null是一个特殊值,在下列情况下应该使用null:
用于初始化一个变量,该变量可以被指定为一个对象
用于与已初始化的变量进行比较,该变量可以是也可以不是对象
当函数的参数预期为对象时,它作为参数传入
当函数的返回值预期为对象时,它用作传出的返回值
以下情况不应使用null:
不要使用null来检测参数是否被传入
不要使用null来检测未初始化的变量
示例代码:
//好用法var person=null//好用法函数getperson(){ if(condition){ return new person(' bindian ');} else { return null} }//好用法var person=getPersonif (person!===null){ DosMesing();}//不好的用法,用来比较var person和未初始化的变量;if (person!=null){ DosMesing();}//不好的用法,检查参数函数是否做了什么(arg1,arg2,arg3,arg4) {if (arg4!=null){ dosamesingelse();}}
理解null的更好方法是将其视为对象的占位符。
Undefined是一个特殊的值,很容易和null混淆。undefined==null为真,这两个值有不同的用途。
所有未初始化的变量都有一个初始值,即未定义,这意味着变量正在等待被赋值。
//写var人不好;console . log(person===undefined);//true
虽然此代码工作正常,但建议避免在代码中使用undefined。该值经常与返回“undefined”的运算符类型混淆。Typeof不管理未定义的变量或未声明的变量,操作结果为“未定义”:
//foo没有声明var personconsole.log(人员类型);//' undefined ' console . log(foo类型);//“未定义”
通过禁止使用未定义的特殊值,可以确保typeof只在一种情况下返回' undefined':
变量用关键字var声明,例如:
var i,num,a,b,name=' bingdian
var关键字声明的变量是性的,用delete运算符删除这些变量会导致错误。
x=1;删除x;console . log(x);//x未定义
javascript的变量类型是松散类型的,可以用来保存任何数据类型。您可以在修改变量值的同时修改变量类型:
var答案=10;x='答案是' 10y=10 '是答案' console . log(x);//答案是10 console . log(y);//10是answer var a=' 17 '-8;//9 var b=' 17 ' 8;//178 console . log(a);console . log(b);
使用未声明的变量将引发错误。
变量的作用域是程序中定义变量的区域。函数中声明的变量只在函数内部起作用(局部变量必须用var关键字声明)。
在函数内,局部变量的作用域优先级高于同名的全局变量,例如:
var i=99var foo=function(){ var I=10;console . log(I);} foo();//10使用本地变量console . log(I);//99使用全局变量
声明局部变量时,必须使用var关键字。当您使用var关键字声明变量时,变量将自动添加到最近的可用环境中。如果不写var,变量会暴露在全局上下文中,这可能与现有变量冲突。另外,如果不添加,很难知道变量的作用域是什么,变量很容易像局部作用域一样泄漏到Document或Window中,所以需要用var声明变量。示例:
var a=3;var foo=function(){ a=10;b=22console . log(a);console . log(b);} foo();//10 22 con sole . log(a);//10 console . log(b);//22
如果一个变量在没有声明的情况下被初始化,它将被自动添加到全局环境中。请看下面两个例子:
函数add(a,b){ var sum=a b;返回总和;}var rs=add(2,3);console . log(RS);//5 console . log(sum);//sum未定义函数add(a,b){ sum=a b;返回总和;}var rs=add(2,3);console . log(RS);//5 console . log(sum);//5 sum初始化赋值时没有使用var关键字。调用add()后,加到全局变量的sum继续存在。
javascript执行代码时,创建了一个上下文执行环境,全局环境是最外层的环境。每个函数在被调用时都创建自己的执行环境,当函数被执行时,当前的执行gg'f环境被破坏。每个执行环境都有一个与之关联的范围链。当执行代码时,javascript引擎通过搜索执行环境的范围链来解析标识符,如变量和函数名。解析过程从作用域链的前端开始,逐步向上查询与给定名称匹配的标识符。一旦找到标识符,搜索过程就停止。如果没有找到,它将继续沿着作用域链向上搜索,直到找到全局对象。如果未找到,则认为标识符未定义。标识符在作用域链中的位置越深,查找和访问它的时间就越长,所以要尽可能多地使用局部变量。
全局环境只能访问全局环境中定义的变量和函数,不能直接访问本地环境中的任何数据。
var a=8;var foo=function(){ console . log(a);//未定义var a=5;console . log(a);//5 } f();
因为局部变量是在整个函数foo()中定义的,全局变量隐藏在整个函数中。虽然局部变量是在整个函数体中定义的,但是在var语句之后并没有初始化。所以更好在函数顶部声明函数中用到的所有变量。
未赋值的变量值是未定义的,使用未定义的变量会导致错误。
var a;console . log(a);//undefinedconsole . log(b);//b未定义
Javascript有一个自动垃圾收集机制,JavaScript解释器可以检测程序何时不再使用某个对象,并释放其占用的内存。
加法运算符()
减法运算符(-)
乘法运算符(*)
除法运算符(/)
模运算符(%),模运算符通常是整数,但也适用于浮点数。
加法运算符()
增量运算符()
I=1;j=I;console . log(I);//2console . log(j);//2i=1;j=I;console . log(I);//2console . log(j);//1
递减运算符()
I=1;j=-I;console . log(I);//0 console . log(j);//0i=1;j=I-;console . log(I);//0 console . log(j);//1
==等号运算符允许类型转换来检测两个运算符是否相等。
如果这两个值具有相同的类型,请检查它们的相等性,如果这两个值相同,则它们相等。
如果这两个值属于不同的类型:
如果一个为空,另一个未定义,则它们相等
如果一个是数字,另一个是字符串,则将字符串转换为数字比较
如果一个为真,将其转换为1比较。如果一个为假,将其转换为0进行比较。
如果一个值是对象,另一个值是数字或字符串,请将对象转换为原始类型值,然后进行比较。您可以使用toString或valueOf转换对象。
JavaScript是弱类型语言,这意味着等式运算符将执行强制类型转换,以便比较两个值。
“==' 0 '//false 0==' '//true 0==' 0 '//true false==' false '//false false==' 0 '//true false==undefined//false==null//false null==undefined//true/t/r/n '==0//true
以上说明了强类型转换,这也是使用==被广泛认为是不好的编程习惯的主要原因。由于其转换规则复杂,会导致难以跟踪的问题。
此外,强制类型转换也会导致性能消耗。例如,为了将一个字符串与一个数组进行比较,必须事先将其强制转换为数字。
当两种值类型不同时,它们也是不同的
如果两个值都是数字,除非其中一个或两个都是NaN,否则它们是等价的。
如果两个值都是字符串,并且相同位置的字符相同,则它们是相同的。
如果两个布尔值都为真或都为假,则它们相等。
两个值指的是同一个对象、数组或函数,它们是相同的。如果引用了不同的对象,它们就不相等。
如果两个赋值器都为空或者都是未定义的,那么它们是相同的。
{}==={};//false new String(' foo ')==' foo ';//false new Number(10)===10;//false var foo={ };foo===foo//true
这里等于运算符的不是值是否相等,而是它们是否属于相同的标识,也就是说,只有对象的相同实例才被认为是相等的。
、=、=
比较运算符只能在数字和字符串上执行,不是数字或字符串的操作数将被转换为数字或字符串。
在中,左操作数是字符串或可以转换为字符串,右操作数是对象或数组。如果左边的值是右边对象的属性名,则返回true。
运算符的类型(以及instanceof)可能是JavaScript中更大的设计缺陷,因为几乎不可能从它们那里得到想要的结果
值类型类类型-“foo”字符串新字符串(“foo”)字符串对象1.2数字新数字(1.2)数字对象真布尔布尔布尔布尔新布尔(真)对象新日期()日期对象新错误()数组对象新数组(1,2,3)数组对象新函数(“”)函数/abc/g RegExp对象(Nitrol/V8中的函数)新RegExp对象(Nitrol/V8中的函数){}对象新对象()对象对象对象
在上面的代码中,“类型”列表示操作符类型的操作结果。如您所见,在大多数情况下,该值返回“object”。
类别列表示对象的内部属性[[类别]]的值。
JavaScript标准文档中定义的: [[Class]]的值只能是以下字符串之一:自变量、数组、布尔值、日期、错误、函数、JSON、数学、数字、对象、regexp、字符串。
为了获得对象的[[类]],我们需要使用在Object.prototype上定义的方法toString
console . log(object . prototype . tostring . call([]));//'[object Array]' console . log(object . prototype . tostring . call({ });//'[Object Object]' console . log(Object . prototype . tostring . call(2));//'[对象编号]'
为了检测对象的类型,强烈建议使用Object.prototype.toString方法;因为这是的依靠。如上表所示,标准文档中没有定义typeof的一些返回值,所以不同的引擎实现可能会有所不同。
除非为了检测一个变量是否已经被定义,否则我们应该尽量避免使用typeof运算符。
instanceof的左操作数是对象,右操作数是对象类的名称。如果左对象是右类的实例,则返回true。
比较自定义对象:
function Foo(){ } function Bar(){ } Bar . prototype=new Foo();新条形图()实例条形图;//true new Bar()instance of Foo;//true//如果只将Bar.prototype设置为函数Foo本身,而不是Foo构造函数Bar.prototype=Foo的一个实例;Foo的new Bar()实例;//false
比较内置类型的实例:
字符串的新字符串(' foo ')实例;//对象的truenew String('foo ')实例;String的true 'foo ' instanceof//false对象的“foo”实例;//false
instanceof运算符只能用于比较来自同一JavaScript上下文的自定义对象。
、 || 、
?
对象创建操作符新建
删除运算符
数组对象访问运算符[],
switch(n){ case 1://do this break;case 2://做点什么打破;case ://做点什么打破;case 4://做点什么打破;default ://做某事休息;}
var count=0;while(count 10){ console . log(count);}
var count=0;do { console . log(count);} while(数到10)
for(var I=0;i 10I){ console . log(I);}
Object .原形. bar=1;var person={ ' name ' : ' bingdian ',' age ' : ' 25 ' } for(I person){ console . log(I ' : ' person[I]);}//name : bindian//age :25//bar :1
像in操作符一样,for in循环在寻找对象的属性时也遍历原型链上的所有属性。
因为不可能改变for本身的行为,所以需要过滤掉不想出现在循环体中的属性,这可以通过Object.prototype的原型上的hasOwnProperty函数来完成
Object .原形. bar=1;var person={ ' name ' : ' bingdian ',' age ' : ' 25 ' } for(I person){ if(person . HasownProperty(I)){ console . log(I ' : ' person[I]);} }//name : bindian//age :25
始终建议使用HasOwnProperty。不要对代码运行的环境做任何假设,也不要假设本机对象是否已经扩展。
15
2022-09
15
2022-09
15
2022-09
15
2022-09
15
2022-09
15
2022-09