var x=0.1;
var y=0.2;
var sum=x+y;
console.log(sum==0.3);// 结果是false
var num;
console.log(num+10==NaN);//结果是false
验证结果是不是NaN,应该使用isNaN(值或者是变量)
7. 字符串的拼接: 使用+可以把多个字符串放在一起形成一个字符串;
只要有一个是字符串,其他的是数字,那么结果也是拼接,不是相加;
如果有一个是字符串,另一个不是字符串,使用-(除了+号的运算符)号,此时会发生计算,浏览器帮助我们 自动的把字符串类型转成了数字类型,这种方式叫:隐式转换,如下:
var str1 = "10";
var str2 = 5;
console.log(str1-str2);//结果是5
var month=parseInt(prompt("请输入月份"));
switch (month){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:console.log("31天");break;
case 4:
case 6:
case 9:
case 11:console.log("30天");break;
case 2:console.log("28天");break;
}
var arr = [10, 0, 20, 0, 30, 0, 50];
var newArr=[];//新数组,用来存放第一个数组中所有非0的数字
for(var i=0;i
function Person(name,age) {
this.name=name;
this.age=age;
this.sayHi=function () {
console.log("我叫:"+this.name+",年龄是:"+this.age);
};
}
//自定义构造函数创建对象:先自定义一个构造函数,创建对象
var obj=new Person("小明",10);
console.log(obj.name);
console.log(obj.age);
obj.sayHi();
var obj2=new Person("小红",20);
console.log(obj2.name);
console.log(obj2.age);
obj2.sayHi();
console.log(obj instanceof Person);//true
console.log(obj2 instanceof Person);//true
//自定义狗的构造函数,创建对象
function Dog(name,age,sex) {
this.name=name;
this.age=age;
this.sex=sex;
}
var dog=new Dog("大黄",20,"男");
console.log(dog instanceof Person);//false
console.log(dog instanceof Dog);//true
var person = new Object();
person.name = 'lisi';
person.age = 35;
person.job = 'actor';
person.sayHi = function(){
console.log('Hello,everyBody');
}
(2)自定义构造函数:var obj2 = new 自定义构造函数;
function Person(name,age,job){
this.name = name;
this.age = age;
this.job = job;
this.sayHi = function(){
console.log('Hello,everyBody');
}
}
var p1 = new Person('张三', 22, 'actor');
console.log(per instanceof Person);
//只有这种方式可以知道对象的类型是Person
(3)字面量的方式:var obj3 = {};(创建对象)、var num = 10(数字); var arr = [];(数组),缺陷:一次性对象
var o = {
name: 'zs',
age: 18,
sex: true,
sayHi: function () {
console.log(this.name);
}
};
(4)工厂函数创建对象
function createPerson(name, age, job) {
var person = new Object();
person.name = name;
person.age = age;
person.job = job;
person.sayHi = function(){
console.log('Hello,everyBody');
}
return person;
}
var p1 = createPerson('张三', 22, 'actor');
工厂模式和自定义构造函数
共同点:都是函数,都可以创建对象,都可以传入参数
区别:(1)工厂模式: 函数名是小写;有new;有返回值;new之后的对象是当前的对象;直接调用函数就可以创建对象。(2)自定义构造函数::函数名是大写(首字母); 没有new;没有返回值;this是当前的对象;通过new的方式来创建对象。
原始数据类型: number,string,boolean,undefined, null,object
基本类型(简单类型),值类型: number,string,boolean
复杂类型(引用类型):object
空类型:undefined,null
console.dir(对象):把对象的结构显示出来
基本类型又叫做值类型,值类型的值存储在栈中
复杂类型又叫做引用类型,对象在堆上存储,地址在栈上存储
var num=10;//值类型,值在栈上
var obj={};//复杂类型,对象在堆,地址(引用)在栈
值类型之间传递,传递的是值
引用类型之间传递,传递的是地址(引用)
值类型作为函数的参数,传递的是值
引用类型作为函数的参数,传递的是地址
例题:
function Person(name,age,salary) {
this.name = name;
this.age = age;
this.salary = salary;
}
function f1(person) {
person.name = "ls";
person = new Person("aa",18,10);
}
var p = new Person("zs",18,1000);
console.log(p.name);//zs
f1(p);
console.log(p.name);//ls
18. 堆栈空间分配区别:
(1)栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈;
(2)堆(操作系统): 存储复杂类型(对象),一般由程序员分配释放, 若程序员不释放,由垃圾回收机制回收,分配方式倒是类似于链表。
19. string ---->字符串类型----基本类型、 String---->字符串类型----引用类型。
字符串可以看成是字符组成的数组,但是js中没有字符类型
因为字符串可以看成是数组,所以,可以通过for循环进行遍历
字符串特性:不可变性,字符串的值是不能改变
字符串的值之所以看起来是改变的,那是因为指向改变了,并不是真的值改变了
var str = 'abc';
str = 'hello';
// 当重新给str赋值的时候,常量'abc'不会被修改,依然在内存中
// 重新给字符串赋值,会重新在内存中开辟空间,这个特点就是字符串的不可变
// 由于字符串的不可变,在大量拼接字符串的时候会有效率问题
// var str=new String("hello");对象
var str="hello";
str[1]="W";
console.log(str);
for(var i=0;i
var str="hello";//基本类型
str=str.replace("ll","HH");//调用了方法,转成了基本包装类型对象,不再是基本类型
console.log(str);
注意:如果是一个对象&&true,那么结果是true,如果是一个true&&对象,那么结果是对象。
var flag=new Boolean(false);//虽然是值是false,但是new了所以是对象,对象就是true
var result1=true&&flag;//flag对象
var result2=flag&&true//true
console.log(result1,result2);
var num2=Number(“10”),这是数值类型
var num=10;//数值类型
var num2=Number("10");//这是类型转换,没有new,所以还是数值类型
var num3=new Number("10");//new了,所以是基本包装类型
function setInnerText(element,text) {
//判断浏览器是否支持这个属性
if(typeof element.textContent =="undefined"){//不支持
element.innerText=text;
}else{//支持这个属性
element.textContent=text;
}
}
//获取任意标签中间的文本内容
function getInnerText(element) {
if(typeof element.textContent=="undefined"){
return element.innerText;
}else{
return element.textContent;
}
}
onload=function () {
document.getElementById("btn").onclick=function () {
//设置跳转的页面的地址
//location.href="http://www.jd.com";//属性
//location.assign("http://www.jd.com");//方法
//location.reload();//重新加载--刷新
//location.replace("http://www.jd.com");//没有历史记录
};
};
title
不需要共享的数据写在构造函数中,需要共享的数据写在原型中
function Student(name, age, sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
//简单的原型写法
Student.prototype = {
constructor:Student, //必须手动增加构造器的指向,该代码不能省略
height: "188",
weight: "55kg",
study: function () {
console.log("哈哈");
},
eat: function () {
console.log("嘎嘎");
}
};
function f1() {
console.log("哈哈");
}
f1();
(2)构造函数
function F1() {
console.log("hh");
}
var f=new F1();
(3)对象的方法
function Person() {
this.play=function () {
console.log("hh");
};
}
var per=new Person();
per.play();