JavaScript基础语法
一.字面量和变量
字面量,都是一些不可改变的值,如:1,2,3...,可直接使用
变量,可以用来保存字面量。
//声明变量
var a;
//变量赋值
a = 12;
//声明与赋值同时
var b = "Hello";
//标识符一般采用驼峰命名法,首字母小写,单词首字母大写,其他小写
var helloWorld = 12;
二.JavaScript 输出
//弹出警告窗口
alter("Hello world!");
//写入到HTML文档中,故运行时会输出在页面当中
document.write("Hello World");
//写入到控制台
console.log("Hello world");
三.数据类型
基本类型:String(字符串) Number(数字) Boolean(布尔值) NULL(空) Undefined(未定义) Symbol
//字符串
var str = "Hello";
//数字
var num1 = 1;
var num2 = 1.0;
//十六进制
var num3 = 0xfff;
//八进制
var num3 = 07;
//js中Number类型的最大值:Number.MAX_VALUE;
var a = Number.MAX_VALUE
/*当值大于Number.MAX_VALUE时就会显示Infinity,Infinity标志正无穷,-Infinity标志负无穷,是个字面量*/
var a = Infinity;
//NaN 是一个特殊数字,表示Not a Numberi
var a = "a"*"b";
/*使用js进行浮点计算可能不精确,所以js尽量不要进行精确度较高的运算,如以下运算得到的结果可能不是0.3,而是0.300000000000001这样的结果。*/
var c = 0.1+0.2;
//布尔值
var x = true;
var y = false;
//未定义
var x; //此时x就是未定义类型
//空
var x = null;
//JavaScript 变量均为对象,当声明一个变量时,就创建了一个对象
// 往往 var x; 这样定义变量,变量类型并未定义,但可以使用new 关键字定义类型
//这样x就是Number型的
var x = new Number;
//转义字符
/*
\" 表示 "
\' 表示 '
\n 表示换行
\t 表示制表
*/
var str = "I say \"hello\"";
强制类型转化
/*
将其他数据类型转为String类型
1. 调用被转换类型的toString()方法,该方法不会改变原元素,二十返回转换结果,注意null和undefined没有toString()方法,不然会报错
2. 调用String()函数,并将被转化数据作为参数,该函数不会改变原元素,返回转换结果
*/
//-------------1--------------
var a = 123;
a = a.toString();
//----------------2----------
var a = 123;
a = String(a);
var b;
b = String(b);
/*-------------------------------------------------------------*/
/*
将其他数据类型转为Number类型
1. 使用Number()函数,并将被转化数据作为参数,该函数不会改变原元素,返回转换结果
2. 该方式专门应对字符串:
-parseInt()将字符串转化为整数
-parseFloat()将字符串转化为浮点数
*/
//-------------1-------------
var a = "123";
a = Number(a);
/*注如字符串含有非数字字符,以下a的结果为NaN,即非数字意思,如果是全空格则为0
null > 0
undefined > NaN
*/
var a = "abc"
a = Number(a);
//---------------2-------------
var a = "123px";
//parseInt可以将字符串有效整数提出转化为整数,第二个参数可以指定进制
a = parseInt(a,10);
var b = "123.122px";
b = parseFloat(b);
/*-----------------------------------------------------*/
//转化为Boolean,使用Boolean()
/*
NaN > flase
0 > flase
其他 > true
"" > flase
非空串 > true
null > flase
undefined > flase
*/
var a = 123;
a = Boolean(a);
引用数据类型:Object 对象,对象属于一种复合数据类型
四.循环
//循环与C语言差不多
//----------while循环---------------
while(条件){
}
//----------for循环----------------
for(var i=0; i < 10 ; i++;){
}
五.对象
/*
对象类型:
1.内建对象
-由ES标准中定义的对象,在任何的ES的实现中都可以使用
- 比如:Math String Number Boolean Function Object...........
2.宿主对象
- 由JS运行环境提供的对象,目前来说由浏览器所提供的
- 比如BOM,DOM
3.自定义对象
- 由开发人员自己创建的对象
*/
//1.创建对象
var obj = new Object();
//2.向对象中添加属性
obj.name = "Zheng";
obj.gender = "男";
obj.age = 18;
//3.读取对象中的属性
//法1
console.log(obj.name);
//法2
console.log(obj["name"]);
/*
in运算符,可以检查一个对象中是否含有某属性,有返回true,无返回flase
*/
console.log("name" in obj);
/*
注意
JS中的变量都是保存在栈内存里的,
基本数据类型的值都是保存在栈内存当中,修改一个变量不会影响其他变量
对象是保存在堆内存当中
var obj2 = obj;
是把 obj的地址传递给obj2
故修改obj的属性,obj2的属性也会被修改
*/
/*
使用字面量创建一个对象
使用字面量创建一个对象时,可直接指定属性
*/
var obj = {};
var obj2 = {
name:"Zheng",
age:18,
test:{name:"Hong"}
}
六.函数
/*
函数
-函数也是一个对象
-函数中封装一些功能
*/
//创建一个函数
var fun = new Function();
function myFunction(p1,p2){
return p1*p2;
}
//匿名函数
var fun = myFunction(){
};
/*注意,
如果没有return或者return后不返回任何值,则返回值为undefined
当调用函数时,传入参数过多或参数类型不同,并不会报错。
*/
var fun3 = function(p1,p2){
return p1*p2;
};
//调用
fun3()
//立即执行函数,函数定义完立即被调用,立即执行函数往往只执行一次
(function(){
})();
(function(a,b){
return a*b;
})(1,2);
七.作用域
/*在JS中有两种作用域:全局作用域,函数作用域
在全局作用域中,有一个全局对象window
在全局作用域中,所有变量都会作为window的属性保存
在全局作用域中,所有函数都会作为window的方法保存
*/
// var a=1;的语句以下都可以访问a
var a = 1;
var myFunction = function(){};
// 函数体以外都访问不到这个a,此时就会报错
var myFunction = function(){
var a = 1;
};
console.log(a);
/*
以下两段代码执行结果不同
1的结果是undefined
2的结果是报错
原因:
-使用var关键字声明的变量,会在所有代码执行前被声明
-如果不用var关键字声明,不会在所有代码执行前被声明
*/
//------------1--------------
console.log(a);
var a=1;
//------------2-------------
console.log(a)
a=1;
/*
函数提前
function myFunction(){
}
如此创建函数,它会在所有代码执行前完成创建,一般可在任意位置调用
var myFunction()=function {};则只能在该函数创建语句后调用该函数
*/
/* ---------var和let的区别
1.var声明的变量没有块作用域,let有如
if(a>b){
var c=1;
}
var d = c;
如此d的值为1;
-----------------------
if(a>b){
let c=1;
}
var d = c;
此时就会报错,因为c还没被定义,c仅供在if(a>b){}这里面使用
2.在相同var可重新声明变量,let不可,在不同作用域,let可以
var x=1;
var x=2; //可以
let x=1;
let x=2;//不可以
let x=1;
{
let x= 2;//可以
}
*/
八.类(构造函数)
/*
构造函数的执行流程
1.立刻创建一个新的对象
4.将新建的对象设置为函数的this
3.逐行执行函数的代码
4.将新建的对象作为返回值返回
这是JS创建类的方法
*/
function Person(name,age){
this.name = name;
this.age = 18;
this.sayName:function(){
alter(this.name);
}
}
var per = new Person("Zheng",12);
//使用instanceof可以检查一个对象是否是一个类的实例
console.log(per instanceof Person);
//这样没创建一个对象都不用每次创建sayName函数,如此可以减少内存
//将sayName在全局作用域中
function sayName(){
return this.name;
}
function Person(name,age){
this.name = name;
this.age = 18;
this.sayName = sayName;
}
var per = new Person("Zheng",12);
/*
在全局区域中定义函数,污染了全局作用域的命名空间
而且定义在全局作用域很不安全
原型 prototype
我们创建的每一个函数,解析器都会向函数中添加一个属性prototype
该属性指向prototype对象
当以构造函数调用时,它所创建的对象中都会有一个隐含属性
指向该构造函数的原型对象,我们可以通过__proto__来访问
console.log(per.__proto__);
原型对象就相当于一个公共区域,所有同一个类的实例都可以访问到这个原型对象
我们可以将共有内容统一添加到原型对象当中
当访问一个对象的属性或方法中,闲去,会现在对象自身中查找,没有则去原型对象中去找
有则返回
以后创建构造函数时我们可以将对象共有的属性和方法添加到原型对象中
*/
//向Person的原型对象添加属性
Person.prototype.a = 1;
Person.prototype.sayName = function(){
console.log(this.name);
};
/*
使用hasOwnProperty方法可查看对象自身是否含有该属性
hasOwnProperty方法是per原型的原型的方法
Object对象没有原型
*/
console.log(per.hasOwnProperty("name"));
//--------------
console.log(per); //打印出的是[object , Object]
//当我们希望输出一个对象时,会自动调用toString方法相当于下面语句
console.log(per.toString());
九.垃圾回收
标签:console,name,对象,JavaScript,基础,语法,log,var,函数
From: https://www.cnblogs.com/iamzheng/p/17155340.html