一、字面量
● 1.都是一些不可改变的值,表示的是事/物;
● 2.字面量都是可以直接使用的(一般不推荐使用,使用起来比较麻烦);
二、变量
- 1.变量可以用来保存字面量;
- 2.变量的值可以改变;
- 3.在开发中基本都是使用变量,使用字面量很少,基本不用字面量;
三、标识符
- 1.js中所有可以由我们自主命名的都可以称为标识符;
- 2.第一个字符必须是字母、下划线(_)或美元符号($);
- 3.余下的字符可以是下划线、美元符号或任何字母或数字、字符;
- 4.标识符不能是ES中的关键字或者保留字;
- 5.标识符一般都采用驼峰命名法;
- 6.首字母小写,每个单词开头字母大写,其余字母小写;
- 7.Js底层保存标识符时实际上是采用的Unicode编码,所以理论上讲,所有utf-8中含有的内容都可以作为标识符;
四、变量声明
- 在Javascript中变量声明ES5语法是只有var可以声明变量、在ES6语法中大多数使用let来声明变量,const声明常量
变量名需要遵守两条简单的规则:
- 第一个字符必须是字母、下划线(_)或美元符号($)
- 余下的字符可以是下划线、美元符号或任何字母或数字字符
//下面的变量都是合法的:
let test;
const $TEST;
var $1;
let _$te$t2;
- 著名的变量命名规则只是因为变量名的语法正确,并不意味着就该使用它们。变量还应遵守以下某条著名的命名规则:
/*
一、Camel 标记法(小驼峰命名法)
首字母是小写的,接下来的字母都以大写字符开头。一般用于函数命名,例如:
*/
let myTestValue = 0, mySecondValue = "hi";
/*
二、Pascal 标记法(大驼峰命名法)
首字母是大写的,接下来的字母都以大写字符开头。一般用于构造函数命名,例如:
*/
let MyTestValue = 0, MySecondValue = "hi";
/*
三、匈牙利类型标记法
在以 Pascal 标记法命名的变量前附加一个小写字母(或小写字母序列),说明该变量的类型。例如,i 表示整数,s 表示字符串,如下所示:
*/
let iMyTestValue = 0, sMySecondValue ="hi";
注:变量声明不是必须的,但是没有声明的对象在调用时会报错,需要赋值才可使用
ECMAScript另一个有趣的方面(也是与大多数程序设计语言的主要区别),是在使用变量之前不必声明。例如:
var sTest = "hello ";
sTest2 = sTest + "world;
alert(sTest2);
/*
在上面的代码中,首先,sTest被声明为字符串类型的值"hello"。接下来的一行,用变量sTest2把sTest与字符串"world"连在一起。变量sTest2并没有用var运算符定义,这里只是插入了它,就像已经声明过它一样。
ECMAScript的解释程序遇到未声明过的标识符时,用该变量名创建一个全局变量,并将其初始化为指定的值。
这是该语言的便利之处,不过如果不能紧密跟踪变量,这样做也很危险。最好的习惯是像使用其他程序设计语言一样,总是声明所有变量。
*/
//变量声明的形式:
var a;
Var a,b,c;
//变量赋值的形式:
var a = 10;
Var a = 10, b = 'abc', c = true;
prompt(); //浏览器弹出输入框
document.write(a); // 页面输出内容
console.log(b); // 控制台打印输出
五、常量
//常量声明,全大写为常量,常量按照规范不可变,且不允许重新赋值
const NUM = 3.1415926;
六 、数据类型
-
基本数据类型
-
number 数字型(整数、小数、整数、负数)
-
string 字符串型
-
boolean 布尔型
-
undefined 未定义型
-
null 空类型
-
引用数据类型
-
object 对象
//数字型
let a = 10;
let b = 'c' + a; // 结果为NAN,表示不明类型
//字符串型
let c = '立白';
let d = "wang";
//字符串拼接
document.write( '忘本' + a + d);
//字符串模板拼接
document.write(`大家好,我叫${c}, 今年${a}岁`);
/*
在字符串中我们可以使用\作为转义字符,当表示一些特殊符号时可以使用\进行转义
常用转义字符:
\" 表示双引号
\' 表示单引号
\n 表示换行
\t 表示制表符
\\ 表示斜杠
*/
//布尔型 true false
let y = 10;
let e = 100;
document.write(y >e); // false
// undefined 未定义型
let p;
//null 空类型
let r = null;
//Array(数组)类型声明与赋值
let arr = [1, 2, 3, 4];
let arr1 = new Array(1, 2, 3);
/*
arr.push() 添加至数组末尾
arr.unshift() 添加至数组开头
arr.pop() 删除数组中的最后一个元素并返回该元素的值
arr.shift() 删除数组中的第一个元素并返回该元素的值
arr.splice(操作的下标,删除的个数)
*/
//object(对象)类型声明与赋值
var obj = {
name : 'liu',
age : 100,
sex : 'male'
}
//typeof() 判断数据类型,可以不加括号
typeof a;
typeof(r);
七、强制类型转换
类型转换:
一、显示类型转换
~~~javascript
//字符串转数字
let num = Number('123');
console.log(`${typeof(num)}:${num}`);//提取转换数字 undefined不能转换成数字
let demo = "10"
//parseInt的目的是把数转换成整型的数,只转换数字或者字符串数字,以目标为基底(16进制)转换成10进制的数
let nums = parseInt(demo ,16 );//16为radix,取值范围在2-36进制这里的16表示十六进制
console.log(`${typeof(nums)}:${nums}`);
let str = "123abc"
let numStr = parseInt(str);//从数字位开始看,看到非数字位就截断,返回数字位
console.log(`${typeof(numStr)}:${numStr}`);
//字符串转浮点数
let ints = "10"
let floatStr = parseFloat(ints);//转换成浮点型
console.log(`${typeof(floatStr)}:${floatStr}`);
//数字转为字符串
let number = 1000
let strNum = String(number);//转换成字符串型
console.log(`${typeof(strNum)}:${strNum}`);
let numberB = 1000
//转换成字符串型 undefined null不能用toString方法转换 toString(8),目标为转换成8进制
let strNumB = numberB.toString();
console.log(`${typeof(strNumB)}:${strNumB}`);
//二进制转换成16进制
let bin = 10101010;
let bins = parseInt(bin , 2);
let strBin = bins.toString(16);
console.log(`${typeof(strBin)}:${strBin}`);
~~~
二、隐性类型转换
//将数值放入这个方法内能判断这个数值是不是非数,以true和false呈现结果,是NaN为true,原理是把NaN中的数放到Number()中进行比对,在返回给NaN
isNaN()
let num = "123";
num ++/--; //结果为124/122,经过了Number的转换
let a = "abc";
/*
+ a;
- a;
=== 绝对等于
!== 绝对不等于
*/
alert(typeof(n));//undefined
alert(typeof(undefined));//undefined
alert(typeof(NaN));//number
alert(typeof(null));//object
let a1="123abc";
alert(typeof(+a1));//number
alert(typeof(!!a1));//boolean
alert(typeof(a1 + ""));//string**
alert(1 == "1");//true
alert(NaN == NaN);//false
alert(NaN == undefined);//false
alert("11" == 11);//true
alert(parseInt("123abc"));//123
let num = 123123.345789;
alert(num.toFixed(2));//123123.35
alert(typeof(typeof(a)));****//string**