变量
- let变量
let允许声明一个作用域被限制在块级中的变量、语句或者表达式。在Function中局部变量推荐使用let变量,避免变量名冲突。
作用域规则
let声明的变量只在其声明的块或子块中可用,这一点,与var相似。二者之间最主要的区别在于var声明的变量的作用域是整个封闭函数。
function varTest() {
var x = 1;
if (true) {
var x = 2; // 同样的变量!
console.log(x); // 2
}
console.log(x); // 2
}
function letTest() {
let x = 1;
if (true) {
let x = 2; // 不同的变量
console.log(x); // 2
}
console.log(x); // 1
}
2.用var关键字声明和不用关键字声明
// num1为全局变量,num2为window的一个属性
var num1 = 1;
num2 = 2;
// delete num1; 无法删除
// delete num2; 删除
function model(){
var num1 = 1; // 本地变量
num2 = 2; // window的属性
// 匿名函数
(function(){
var num = 1; // 本地变量
num1 = 2; // 继承作用域(闭包)
num3 = 3; // window的属性
}())
}
3. const关键字
const 关键字用来声明 JavaScript中的常量(与变量相对,不可修改,但同样是用于存储信息的"容器"。),常量的值不能通过重新赋值来改变
//定义常量a并赋值为0
const a = 0;
//报错(不能重新赋值)
a = 1;
//报错(不能重新声明)
const a = 2;
//输出0
console.log("a is: " + a);
- 字面量的概念
字面量(literal)用于表达源代码中一个固定值的表示法(notation),整数、浮点数以及字符串等等都是字面量。
示例:
var a=1; // a 是变量,1 是字面量
又如:
var stooge = { // stooge 是一个对象
“frist-name” = “Julie”, // 等号左为属性名,右侧为属性值
last_name = “beck” // 属性名如果是合法的标识符,可省略引号
}; // “frist-name”, last_name, “Julie”, “beck” 都是对象字面量
总之,字面量就是没有用标识符封装起来的量,是“值”的原始状态。
与常量的区别如下:
// C/C++:
const int A = 1; // A 是常量,1 是字面量
A++; // error,常量值不能改变
5、重复声明变量
JavaScript 允许重复声明变量,后声明的覆盖之前的
var a = 1;
var a = ‘x’;
console.log(a);
// 输出 ‘x’
6、JavaScript 允许重复定义函数
JavaScript 没有重载这个概念,它仅依据函数名来区分函数。
后定义的同名函数覆盖之前的,与参数无关。
function test() {
console.log(“test”);
}
test(); //输出 “test arg0 + undefined”
function test(arg1) {
console.log(“test arg” + arguments.length + " + " + arg1);
}
test(1,2); //输出 “test arg2 + 1”
值类型(基本类型):字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol。
引用数据类型:对象(Object)、数组(Array)、函数(Function)。
JavaScript 拥有动态类型
JavaScript 拥有动态类型。这意味着相同的变量可用作不同的类型:
实例
var x; // x 为 undefined
var x = 5; // 现在 x 为数字
var x = “John”; // 现在 x 为字符串
创建一个数组
数组有四种方式:
var arr1 = new Array(‘a’, ‘b’, ‘c’); //这是一个预定义的数组,在创建时初始化
var arr2 = [‘a’, ‘b’, ‘c’ ]; //同样是在创建时初始化,但是这种创建更为简洁直观
var arr3 = new Array( );
var arr4 = [ ]; //这两种是创建空的数组
对象的创建,一般推荐使用
var people = {name : ‘Tom’, age : 21 , eat : function(){ } }
也可先创建对象再追加属性和方法
var people = new Object();
people.name = ‘Tom’;
people.age = 21;
people.eat = function(){ }
function Demo(){
var obj=new Object();
obj.name=“张思”;
obj.age=12;
obj.firstF=function(){
}
obj.secondF=function(){
}
return obj;
}
var one=Demo();
// 调用输出
document.write(one.age);
function Demo(){
var obj = new object();
obj.name
obj.age = 12;
obj.firstF = function(){
obj.secondF = function
return obj;
}
第二种:
function Demo(){
this.name=“张思”;
this.age=12;
this.firstF=function(){
}
this.secondF=function(){
}
}
var one=new Demo
// 调用输出
document.write(one.age);
如果你要判断该对象是否为数组,可以使用以下两种方法:
1、使用 isArray 方法
var cars=new Array();
cars[0]=“Saab”;
cars[1]=“Volvo”;
cars[2]=“BMW”;
// 判断是否支持该方法
if (Array.isArray) {
if(Array.isArray(cars)) {
document.write(“该对象是一个数组。”) ;
}
}
2、使用 instanceof 操作符
var cars=new Array();
cars[0]=“Saab”;
cars[1]=“Volvo”;
cars[2]=“BMW”;
if (cars instanceof Array) {
document.write(“该对象是一个数组。”) ;
}
注意 undefined 和 null 都是小写,并且。
var x,y;
if(x == null){
document.write(x);
}
if(y == undefined){
document.write(y);
}
基本类型的变量是存放在栈内存(Stack)里的
var a,b;
a = “zyj”;
b = a;
console.log(a); // zyj
console.log(b); // zyj
a = “呵呵”; // 改变 a 的值,并不影响 b 的值
console.log(a); // 呵呵
console.log(b); // zyj
图解如下:栈内存中包括了变量的标识符和变量的值。
利用 toString() 方法可以把数值转换为字符串。
使用 parseInt() 和 parseFloat() 方法可以把字符串转换为数值。
要把任何值转换为布尔型数据,在值的前面增加两个 !! 感叹号即可,!!0 为 False,其余的均为 True。