js基础篇
Posted 老张在线敲代码
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js基础篇相关的知识,希望对你有一定的参考价值。
javascript语法
字面量 也叫直接量,就是程序中直接使用的,是变量后面的值
变量就是声明一个未知可变的量 变量声明符合unicode编码所有变量符合utf-8的编码都可以
标识符命名标准:
1.必须是字母,数字,_,¥开头
2.以驼峰命名规则
3. 首单词小写 后面的单词首字母大写 -*/
变量的作用域
在函数之外声明的变量,叫做全局变量,因为它可被当前文档中的任何其他代码所访问。
在函数内部声明的变量,叫做局部变量,因为它只能在当前函数的内部访问。
变量提升
JavaScript 变量的另一个不同寻常的地方是,你可以先使用变量稍后再声明变量而不会引发异常。这一概念称为变量提升;JavaScript
变量感觉上是被“提升”或移到了函数或语句的最前面。但是,提升后的变量将返回 undefined
值。因此在使用或引用某个变量之后进行声明和初始化操作,这个被提升的变量仍将返回 undefined 值。
例子1
console.log(x === undefined); // true
var x = 3;
例子2
//will return a value of undefined
var myvar = "my value";
(function() {
console.log(myvar); // undefined
var myvar = "local value";
})();
上面的例子,也可写作:
例子1
var x;
console.log(x === undefined); // true
x = 3;
例子2
var myvar = "my value";
(function() {
var myvar;
console.log(myvar); // undefined
myvar = "local value";
})();
由于存在变量提升,一个函数中所有的var语句应尽可能地放在接近函数顶部的地方。这个习惯将大大提升代码的清晰度。
常量(Constants)
你可以用关键字 const
创建一个只读的常量。常量标识符的命名规则和变量相同:必须以字母、下划线(_)或美元符号($)开头并可以包含有字母、数字或下划线。
const PI = 3.14;
常量不可以通过重新赋值改变其值,也不可以在代码运行时重新声明。它必须被初始化为某个值。 常量的作用域规则与 let
块级作用域变量相同。若省略const关键字,则该标识符将被视为变量。 在同一作用域中,不能使用与变量名或函数名相同的名字来命名常量。
例如:
// 这会造成错误
function f() {};
const f = 5;
// 这也会造成错误
function f() {
const g = 5;
var g;
//语句
}
然而,对象属性被赋值为常量是不受保护的,所以下面的语句执行时不会产生错误。
const MY_OBJECT = {"key": "value"};
MY_OBJECT.key = "otherValue";
同样的,数组的被定义为常量也是不受保护的,所以下面的语句执行时也不会产生错误。
const MY_ARRAY = ['html','CSS'];
MY_ARRAY.push('JAVASCRIPT');
console.log(MY_ARRAY); //logs ['HTML','CSS','JAVASCRIPT'];
数据类型
最新的 ECMAScript 标准定义了8种数据类型:
5种基本数据类型:
1 布尔值(Boolean),有2个值分别是:true 和 false.
2 null , 一个表明 null 值的特殊关键字。JavaScript 是大小写敏感的,故 null 与 Null、NUL完全不同。
3 undefined ,和 null 一样是一个特殊的关键字,undefined 表示变量未定义时的属性。
4 数字(Number),整数或浮点数,例如: 42 或者3.14159。
5 字符串(String),字符串是一串表示文本值的字符序列,例如:“Howdy” 。
3种引用数据类型:
1 以及对象(Object)。
2 function 函数
3 array 数组
虽然这些数据类型相对来说比较少,但是通过他们你可以在程序中开发有用的功能。对象(Objects)
和函数(functions)是这门语言的另外两个基本元素。你可以把对象当作存放值的一个命名容器,然后将函数当作你的程序能够执行的步骤。
字面量 (Literals)
布尔字面量 (Boolean literals)
不要混淆作为布尔对象的真和假与布尔类型的原始值true和false。布尔对象是原始布尔数据类型的一个包装器。参见 布尔对象。
整数 (Integers)
整数可以用十进制(基数为10)、十六进制(基数为16)、八进制(基数为8)以及二进制(基数为2)表示。
十进制整数字面量由一串数字序列组成,且没有前缀0。 八进制的整数以 0(或0O、0o)开头,只能包括数字0-7。
十六进制整数以0x(或0X)开头,可以包含数字(0-9)和字母 a~f 或 A~F。 二进制整数以0b(或0B)开头,只能包含数字0和1。
严格模式下,八进制整数字面量必须以0o或0O开头,而不能以0开头。
整数字面量举例:
0, 117 and -345 (十进制, 基数为10)
015, 0001 and -0o77 (八进制, 基数为8) 0x1123,
0x00111 and -0xF1A7 (十六进制, 基数为16或"hex")
0b11, 0b0011 and -0b11 (二进制,基数为2)
浮点数字面量 (Floating-point literals)
浮点数字面值可以有以下的组成部分:
一个十进制整数,可以带正负号(即前缀“+”或“ - ”), 小数点(“.”),
小数部分(由一串十进制数表示),
指数部分 -指数部分以“e”或“E”开头,后面跟着一个整数,可以有正负号(即前缀“+”或“-”)。
浮点数字面量至少有一位数字,而且必须带小数点或者“e”(大写“E”也可)。
简言之,其语法是:
[(+|-)][digits][.digits][(E|e)[(+|-)]digits]
例如:
3.14
-.2345789 // -0.23456789
-3.12e+12 // -3.12*1012
.1e-23 // 0.1*10-23=10-24=1e-24
对象字面量 (Object literals)
对象字面值是封闭在花括号对({})中的一个对象的零个或多个"属性名-值"对的(元素)列表。你不能在一条语句的开头就使用对象字面值,这将导致错误或产生超出预料的行为,
因为此时左花括号({)会被认为是一个语句块的起始符号。(译者:这 里需要对语句statement、块block等基本名词的解释)
以下是一个对象字面值的例子。对象car的第一个元素(译注:即一个属性/值对)定义了属性myCar;第二个元素,属性getCar,引用了一个函数(即CarTypes(“Honda”));第三个元素,属性special,使用了一个已有的变量(即Sales)。
var Sales = "Toyota";
function CarTypes(name) {
return (name === "Honda") ?
name :
"Sorry, we don't sell " + name + "." ;
}
var car = { myCar: "Saturn", getCar: CarTypes("Honda"), special: Sales };
console.log(car.myCar); // Saturn
console.log(car.getCar); // Honda
console.log(car.special); // Toyota
更进一步的,你可以使用数字或字符串字面值作为属性的名字,或者在另一个字面值内嵌套上一个字面值。如下的示例中使用了这些可选项。
var car = { manyCars: {a: "Saab", "b": "Jeep"}, 7: "Mazda" };
console.log(car.manyCars.b); // Jeep
console.log(car[7]); // Mazda
对象属性名字可以是任意字符串,包括空串。如果对象属性名字不是合法的javascript标识符,它必须用"“包裹。属性的名字不合法,那么便不能用.访问属性值,而是通过类数组标记(”[]")访问和赋值。
var unusualPropertyNames = {
"": "An empty string",
"!": "Bang!"
}
console.log(unusualPropertyNames.""); // 语法错误: Unexpected string
console.log(unusualPropertyNames[""]); // An empty string
console.log(unusualPropertyNames.!); // 语法错误: Unexpected token !
console.log(unusualPropertyNames["!"]); // Bang!
字符串字面量 (String literals)
字符串字面量是由双引号(")对或单引号(’)括起来的零个或多个字符。字符串被限定在同种引号之间;也即,必须是成对单引号或成对双引号。下面的例子都是字符串字面值:
"foo"
'bar'
"1234"
"one line \\n another line"
"John's cat"
运算符
运算符就是将一个数或多个数进行运算,并将结果返回 运算符分为:算术运算符 逻辑运算符 一元运算符 比较运算符 算术运算符:+ - * / % ++ –
逻辑及运算符:与&& 或|| 非!
&&必须俩个条件都满足才能成立
||满足其中一条条件即可
!直接否定
一元运算符:a++ ++a
比较运算符:> 大于运算符 < 小于运算符 <= 小于或等于运算符 >= 大于或等于运算符 ==相等运算符 === 严格相等运算符 ! != 不相等运算符
一个等于号是赋值 俩个等于号是判断值是否相等 三个等于号是判断值跟数据类型是否相等、 加号左右俩测如果有字符串就会进行拼串,若无字符串则转为number计算 加减乘除取模都转为number计算
条件运算符也叫三元运算符
赋值运算符
*= += -= = /= %=
if语句
if(条件){执行代码}
else{执行代码1}
if执行流程
只要满足第一个判断条件就执行对应的语句,下面无论是否满足都不执行
不满足第一个条件,接着判断下一个条件,如果下一个条件满足就停止判断,输出对应语句,如果下一个语句还不满足,就继续往下判断
所以如果要写判断条件把最大范围写在上面,小范围写在后面,或者分段写判断条件
循环语句
for循环
for循环的关键字 ()里面是条件 var i=0;初始值 i<=10;循环条件 i++;自增
for循环句式/语法
for(1初始值;循环条件;循环方式){
执行语句
}
1 初始化变量可以放到小括号里面也可以放到循环外面
2 判断是否符合循环条件,如果是true那就继续往下执行 如果是false,直接不执行
3 执行循环体中的语句 4 执行循环方式(++/–等
5 判断是否符合循环条件,如果是true那就继续往下执行 如果是false,直接不执行 初始值只能执行一次
while循环
1 初始化变量:是在循环外面初始化
2 判断是否符合循环条件 如果返回值是true满足条件则执行代码
如果返回值是false不满足条件则跳出循环
3 执行的代码块
4 循环方式,如果放在循环之前,会先按照循环方式增加或减少,然后再输出,如果放到输出后会执行输出。进行下一个循环之前,按照循环方式增加或减少
while(true){}
当while后面的条件一直是true的时候就是一个死循环,为了避免问题,有需要情况下可以在循环体内进行判断,达到某个条件然后break(跳出循环)。
break跟continue可以处理死循环中执行停止或跳过
do..while循环
var a=0;//声明变量
do{//执行块
alert(a);//输出
a++;//循环方式
}
while(a<0)//循环条件
for,while和do while的区别
For的初始值,条件,循环方式可以写到小括号里面,其他不可以使用初始值变量
while和do while初始值都是写在外面的 条件写在小括号内,循环方式卸载循环体内。 do
while是先执行后判断,无论条件是否为true他都会执行一遍
for和while是先判断后执行,当条件为true时才会执行循环体中的代码,条件是false则不执行
switch条件分支语句
parseInt取整,将字符串转换成整型,返回由字符串转换得到的整数。 parseInt()取整是JavaScript当中的内置方法
相同点:俩者取整后都是number类型 不同点:输入数字字符串取整后得数字类型的值 输入得汉字类型的字符串取整后得NaNparseFloat()去浮点 parseFloat()把小数点后面的0去掉
case是switch中匹配的每个案例,必须用break中断每一个语句(除了最后一个),如果不写break只要符合条件包括后面的全部显示,写break只输出符合条件的匹配项
default默认 在switch中放到最后一项,作为最后默认的选项
switch语句和if语句的区别
if语句可以对一些一切未知的条件进行判断 switch语句只可以对有一些已知条件的事情进行判断
强制类型转换
String()将非字符串类型转换为字符串
Number()将非数字类型的转换为数字类型
Boolean()将非布尔类型的转换为布尔类型
隐式类型转换
+-*/%
parseInt()将字符串类型的转换为整数数字
跳转语句
break是跳出循环 break默认终止的是离他最近的循环 如果俩个循环嵌套,想终止外侧循环给外侧循环起名字,在外侧循环上直接写名字
名字:for(){} 然后break 名字; 实现内外循环同时终止
基本数据类型都是一个具体的值 值与值之间没有任何联系
对象则不同,除了基本类型都是对象
以上是关于js基础篇的主要内容,如果未能解决你的问题,请参考以下文章