javascript学习之路二------基本概念

本文详细介绍了JavaScript的基本概念,包括语法、关键字与保留字、变量、数据类型及其转换,以及操作符和流程控制语句。强调了区分大小写、标识符规范、变量赋值与类型判断、数据类型如Boolean、Number、String的特点,还涵盖了Number的表示方式和浮点数精度问题。此外,文章还探讨了一元操作符、位操作符、条件运算符以及各种循环语句的使用,最后提到了函数的定义与参数处理。
摘要由CSDN通过智能技术生成

一、语法:

1.区分大小写:变量test 和变量Test不是一回事,typeof是关键字,所以不能用做函数名,但是typeOf就可以!!!

2.标识符:标识符就是指变量、函数、属性的名字,规范是采用驼峰样式,如:sayHi();
开头以字母或者是下划线或者$符号,除了开头其他的用数字也行!!!谨记规范最重要!

注意:关键字、保留字、null、true、false不可以充当标识符!

3.注释
单行注释:用//,块级(多行)注释:用/**/

4.语句最好以分号;结尾:压缩代码的时候不出错!你不加分号,解析器也会加,别浪费资源了!!!

判断的写法:

if(test)
{
        //推荐使用,让编码意图更加清晰!!!
        alert(test);
}
if(test)
//有效,不推荐使用,用这个的真装逼,就不怕出错吗?
alert(test);

二、关键字和保留字

如果你不想让自己的程序报类似"Identifier Expected"的错误的话,就不要将关键字和保留字当做标识符来用就对了!!!

关键字(26):

break、do、 instancsof 、typeof 、case、 else 、new 、var、 catch 、finally 、return、 void、 continue、 for、 switch、 while、 debugger、 function 、this 、with 、default 、if 、throw 、delete、 in 、try

保留字(32):

abstract、 enum、 int 、short、 boolean 、export、 **interface**、 **static**、byte 、extends 、long 、super、 char、 final 、native、 synchronized、class 、float 、**package**、 throws、const 、goto 、**private** 、transient 、debugger 、**implements**、 **protected** 、volatile 、double、 import 、**public**、**let**、yield、eval

我觉得不管以后的版本怎样更改,在挑选标识符的时候永远都把关键字和保留字作为禁区,不去碰它就不会出错了!!!

三、变量
var message;

上面这种写法,没赋值,message的值就实际就是undefined

变量就是在内存中开辟了空间,来存储数据的,var message=“hello”,这并不能说就是给变量message设定字符串类型,而仅仅是给它赋值而已,此时如果message=10,也是可以的,但是并不推荐!!!

同时创建多个变量的方法,鉴于ECMASCRIPT语法的松散,同时定义不同数据类型的变量也是没有问题的:

var message=“hi”,found=false,age=29;

四、数据类型
每一种语言都有它的基本数据类型:
布尔型Boolean
未定义---------Undefined
空---------Null
数字---------Number
字符串---------String
对象---------Object
如果你想知道当前变量的数据类型,那么一个很好的照妖镜就是typeof

typeof是操作符,并不是函数,typeof后面可以跟括号,也可以不跟,理论上来讲函数其实是一个对象,而不是数据类型!!!不同的浏览器对函数typeof会返回不同的值如:function或者object

什么是字面量

typeof 99 ,其中99就是字面量

null是空对象指针,当你用typeof null的时候,你会发现返回的是一个object类型,它的用处是如果你预先定义了一个变量,但是不知道用它来保存什么数据类型,那么就让他等于Null吧,可以写作var message=null;但是值得注意的是null==undefined返回的是true

Boolean的字面量就两个,true和false,记住一定是小写的,必须是小写的!!!
Boolean(),这是一个函数,里面放的东西返回的不是true就是false!!!

|数据类型|转换为true的值|转换为false的值|

|Boolean| true | false |
|String| 任何非空字符串 | “” |
|Number| 任何非空数字值,包括无穷大 | 0或者NaN |
|Object| 任何对象 | null |
|Undefined| n/a(意思是不适用,是not applicable) | undefined |

Number的格式可以是整数,也可以是浮点数

整数都是以十进制做基本的字面量的,八进制和16进制也可以储存,只不过在处理的时候都会被处理成十进制

八进制 0开头
十六进制 0x开头

最终的转化:
----------------------------------------》
(十六进制)0xA=10(十进制)
(八进制) 070=56(十进制)

浮点数都是包含了小数点的数字值,有的人习惯0.1写成.1,虽然有效,但是不推荐!!!
内存给浮点数开辟的空间是整数的两倍,为了节省资源,当你用到类似1.0的浮点数时,处理时就按照整数型对待的!!!

3.7125e8,这个数其实就是3.7125乘以10的8次方!!!
0.0000003,这个数的表示方法就是3e-7
浮点数的最高精度是17位小数

计算的过程中0.1+0.2 是不等于0.3的,所以用a+b==0.3的时候返回的是false,其实这就是特定的浮点数,所以不要去用他们反馈就好了!!!至于为什么会不等于0.3,那就是IEEE754浮点计算的事了!!!

浮点数的范围是:
Number.MIN_VALUE=5e-324
Number.MAX_VALUE=1.7976931348623157e+308

如果你获取到的数值超出了上面的范围,得到的值就会使Infinity(正无穷),小数的范围是-Infinity(负无穷)。这种数是不能够参与计算的,想要判断数是否有穷尽,用isFinite()函数,这个函数测的是参数是不是在最大值和最小值之间,如果在,返回的就是true

Number.NEGATIVE_INFINITY:负无穷-Infinity
Number.POSITIVE_INFINITY:正无穷Infinity

NaN是非数值的特殊值,意味着本来是要返回一个数值,但是未返回数值的情况!!!谨记NaN和NaN是不等的,也就是说NaN==NaN返回的是false

isNaN()函数,里面的参数如果可以转化为数值,返回的就是false,不能转化为数值,就是true!

isNaN()的参数适用于对象,本身在验证的过程中会调用toString()和valueOf()方法来执行的。

数值转换:
Number()、parseInt()、parsefloat()
Number()适用于各种数据类型,parseInt()、parsefloat()适用于字符串
Number()的参数是布尔类型的话,true就是1,false就是0
Number()的参数是数字,那就是数字
Number()的参数是null,返回0
Number()的参数是undefined,返回NaN
Number()的参数是字符串,"123"就是123,"011"就是11,"1.1"就是1.1,字符串是空的就是0,十六进制转换为十进制,字符串非法就是NaN。

parseInt()解析"1234blue"的得到的结果是1234
parseInt()解析空字符串得到的结果是NaN
parseInt()解析NULL的得到的结果是0
parseInt()解析十六进制或者八进制时,最好在添加一个参数来确定解析成什么进制的!!!
parseInt(“0xAF”,16)就是说这个是十六进制的!!!参数可以使2、8、10、16,建议就是无论什么时候都要制定参数!!!为了避免出错。

parseFloat()的参数如果是可以解析位整数的数,那么直接就解析成了整数了。

String类型:
用单引号或者双引号都行!!!

\n------------换行
 \t------------制表
  \b------------退格
   \r------------回车
    \f------------进纸
     \\------------斜杠
      \'------------单引号
       \"------------双引号
        \xnn------------十六进制表示一个字符
         \unnn------------十六进制表示一个unicode字符

\u03a3 (转义序列)代表一个字符∑
\x41代表一个字符A

获取字符串的长度要用length的点属性方法来拿!!!

text.length

toString();将所有的值都转化为字符串,null和undefined就没有这个方法
传个参数怎么样?
这个参数是用来定义拿回来的字符串是什么进制的?

var  num=10;
alert(num.toString(2));//转化为2进制了,默认不填就是十进制

String();将值先强制转化为字符串,为了防止null和undefined的出现

Object数据类型:
定义一个对象

var o=new Object();//不推荐删除括号,不管有没有参数

Object是所有对象的基础,所以都具备对象的基础属性和方法:
1.constructor--------构造函数

2.hasOwnProperty(propertyName)--------检查给定的属性在当前实例中是否存在

3.isPrototypeOf(object)-------用于检查传入的对象是否是当前对象的原形

4.propertyIsEnumerable(propertyName)用于检查给定的属性是否能够使用for-in循环来枚举。

5.toLocaleString()--------返回对象的字符串表示,该字符串与执行环境的地区对应

6.toString()--------返回对象的字符串表示

7.valueOf()----------返回对象的字符串、数值、布尔值。

五、操作符

一元操作符:++ 、–
var a=10;
var b=++a+1//这里是先+1,a值改变为11,当前b为12,a在打印的话为11
var b=1+a++//这里是后+1,a值不改变,当前b为11,a在打印的话为11

一个+代表正数,一个-代表负数

位操作符,也使用来计算的,了解一下就好,如果你的计算是进制的话就用到未操作符了

布尔操作符:! && ||

加减乘除运算符:+ 、-、 *、 /、 %
在运算的时候如果不是数值类型,会强制转换成数值类型,比如空字符串就是0,true就是1

关系操作符:返回的都是布尔类型的值:
小于等于<=
小于<
大于等于>=
大于>

相等操作符:返回的也是布尔类型的值,要么为true,要么为false

双等于==
不等于!=
全等===(不仅是值相等,数据类型也要相等)‘
不全等!==

条件运算符:?:

A?B:C

如果A为true则A=B,否则=C

赋值操作符:

+=
*=
/=
-=
%=
<<=
>>=

逗号操作符

var num=(5,6,7,8,9,0);
num的值就是0//逗号的表达式最后一项是0

将右边的值赋值给左边

var num=10;
num=num+10;

六、流程控制语句:

if判断语句

if(i=0)//括号里放的是表达式
{
alert("我是"+i)
}else if(i>10){
alert("我是"+i)
}else{
alert("我啥也不是")
}

do-while(后测试循环语句):

var i=0;
do{
i+=2;
console.log("我先来的")
}while(i<10)//括号里放的是表达式

while(前测试循环语句):

var i=0;
while(i<10){
 i+=2;
}

for(前测试循环语句):

    //写法1
    for (var i =0;i<10;i++){
    alert(i);
    }
    alert(i);//i值是可以得到的
    //写法2
    var i ;
    for (i =0;i<10;i++){
    alert(i);
    }
    alert(i);

for无限循环:

for(;;){
alert("我会无限次执行");
}

将for循环当做while循环

var count=10,i=0;
for(;i<count;){
alert(i);
i++;
}

for-in语句

for(var propName in window){
document.write(propName);
}

label+break||continue
label语句:

label:for(var i=0;i<10;i++){
for(var j=0;j<10;j++){
if(i==5 &&j==5){
break label;//跳出循环
}
num++;
}
}

OR

label:for(var i=0;i<10;i++){
for(var j=0;j<10;j++){
if(i==5 &&j==5){
continue label;//跳出循环,执行下一次
}
num++;
}
}

用了label语句,就要避免嵌套过多的循环,标签的名称也要是描述性的最好!!!

with语句:

with(location)
{
var qs = search.substring(1);
var hostName=hostname;
var url =href;
}

with语句的意思就是说关联这个对象,但是这个with语句最好就不用,会影响性能!!!

switch语句

switch(num)//参数可以使任意类型,以数字类型为例
{//没有break就要注释
case num:document.write("数据是"+num);break;
case num:document.write("数据是"+num);break;
case num:document.write("数据是"+num);break;
case num:document.write("数据是"+num);break;
case num:document.write("数据是"+num);break;
case num:document.write("数据是"+num);break;
default:
alert("匹配不成功!");
}

六、函数

sayHi(name,message)
{
document.write(name+","+message);
}

sayHi(“司马麟迦”,“你好吗?”);
函数可以有返回值,也可以没有返回值,返回的东西可以任意!!!
要想返回就要在代码块里面用return,return语句后面的语句是不执行的!!!

computed(a,b)
{
if(a<b){
return true;
}else{
return false;
}
}
computed(100,40);

computed(a,b)中的a,b相当于数组中的元素0,1
arguments.length可以获取传入数组的长度;
arguments[0]其实就是a,arguments[1]其实就是b
如果用的时候报错了,说明实在严格模式下编写的!!!

JS,没有重载一说,两个相同名字的函数,用的一定是后面的,如果一定要重名字,可以通过执行函数的时候,在里面判断有多少个参数在执行!!!

本章结束

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值