整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

JavaScript for循环、in、of 用法详

JavaScript for循环、in、of 用法详解-有效云开发平台开发技巧

们知道在java script中 for 用来实现循环结构,而for...in 用来实现遍历,for...of用来对象迭代遍历。

1、for循环

与其他开发语言相同,JS中for用来实现循环结构之一,

1.1、基本语法:

for ([initialization]; [condition]; [final-expression]) {
  statement
}

1.2、实例:

for(let i=1;i<=10;i++){
    console.log("i=",i);
}

执行结果:

1.3、break关键词

break关键词用户终止循环

for(let i=1;i<=10;i++){
    if(i>5) 
        break;
    
    console.log("i=",i);
}

循环到第5次终止循环。

执行结果:

i=1
i=2
i=3
i=4
i=5

1.4、conitue关键词

continue关键词用户跳过本次循环,继续下一次

for(let i=1;i<=10;i++){
    
    if(i % 2===0 ) continue;
  
    console.log("i=",i);
}

如果i是偶数跳过,执行下一次循环,输出i为奇数

i=1
i=3
i=5
i=7
i=9

for循环是js中基础的循环结构,适用于任何情况,而for...in和for...of则更适合于不同的应用场景。

2、for...in

for...in循环遍历对象的所有可枚举属性。什么是可枚举呢?你可以理解为可枚举就是可表现为键值对的对象,for...in枚举得到的是键值对的键值。

    objs={mp_v:"可视化",mp_a:"低代码",mp_name:"有效云"};
    for(let objk in objs){
        console.log("key:",objk,"值:",objs[objk]);
    }
//执行结果:
key: mp_v 值: 可视化
key: mp_a 值: 低代码
key: mp_name 值: 有效云

从上例中可以看到,for...in 循环枚举得到了键值对 key-value中的key属性值,检索适用键值对的值,将键视为数组中的索引并将其放在方括号 ->objs[key]中,如上面代码中的:objs[objk]。

注意:一维数组也可以理解为键值对,key即为数组的索引,但是for...in枚举是无序的,无法保证枚举得到的顺序,所以不建议使用for...in用来枚举数组,应该使用for,for...of 或for each 来遍历数组。

3、for..of

ES6引入for...of之后,它已经成为广大开发者们常用以迭代枚举对象的方法。

    pmname="有效云开发平台"
    for(letter of pmname){
        console.log(letter);
    }
    //执行结果:
    有
    效
    云
    开
    发
    平
    台

上例使用for...of枚举了字符串中的每个字符,我们注意到,for...of是有序的,这与for...in不同。

for...of可以用来迭代枚举任何,除字符串外还可以是数组、对象等。

    const arrA=[1,2,3,4,5,6];
    for( let v of arrA ){
        console.log(v);
    }
    //执行结果:
    1
    2
    3
    4
    5
    6

上面代码使用 for...of 遍历了数组arrA,接下来使用for..of迭代对象。

    objs={mp_v:"可视化",mp_a:"低代码",mp_name:"有效云"};

    for(const [k,v] of Object.entries(objs)){
        console.log("key:",k,"val:",v);
    }

//    key: mp_v val: 可视化
//    key: mp_a val: 低代码
//    key: mp_name val: 有效云

通过这个示例,我们看到在遍历对象时,通过[v,k],同时获得键值对的键和值。

感谢阅读,欢迎关注有效云开发平台。

affe的安装笔记 Ubuntu16.04

跑实验用过一次caffe,光安装就用了一周,经历了各种错误,真的好难安装,记录下最后成功安装的方法,希望给大家安装时提供参考。

1、下载安装所需的包,例如anaconda,numpy ,protobuf,opencv,cython, scikit-image等

opencv使用

conda install opencv

直接使用 conda install caffe-gpu安装好所需的环境再使用源码编译,进行下面的步骤

再 使用conda uninstall caffe-gpu 去掉这个包,装上需要的环境,但是这个包不能直接使用(我也不知道原因)。

2、下载caffe

git clone https://github.com/BVLC/caffe.git

3、更改makefile.config

  • 使用GPU即使用cudnn,则去掉下一行的注释
USE_CUDNN :=1
  • 使用opencv编译和使用,则去掉这行的注释
USE_OPENCV :=0
OPENCV_VERSION :=3
  • 更改cuda的路径
CUDA_DIR :=/usr/local/cuda_env/cuda-8.0
  • 使用anaconda中的python,更改下面几行,注意文件的名字及路径是否正确,具体查看一下
ANACONDA_HOME :=$(HOME)/anaconda3/envs/caffe
PYTHON_INCLUDE :=$(ANACONDA_HOME)/include \
 $(ANACONDA_HOME)/include/python3.6m\
 $(ANACONDA_HOME)/lib/python3.6/site-packages/numpy/core/include
PYTHON_LIB :=$(ANACONDA_HOME)/lib
  • 更改这两行
INCLUDE_DIRS :=$(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
LIBRARY_DIRS :=$(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/hdf5/serial/

完整的makefile.config

## Refer to http://caffe.berkeleyvision.org/installation.html
# Contributions simplifying and improving our build system are welcome!

# cuDNN acceleration switch (uncomment to build with cuDNN).
USE_CUDNN :=1

# CPU-only switch (uncomment to build without GPU support).
# CPU_ONLY :=1

# uncomment to disable IO dependencies and corresponding data layers
USE_OPENCV :=0
# USE_LEVELDB :=0
# USE_LMDB :=0

# uncomment to allow MDB_NOLOCK when reading LMDB files (only if necessary)
# You should not set this flag if you will be reading LMDBs with any
# possibility of simultaneous read and write
# ALLOW_LMDB_NOLOCK :=1

# Uncomment if you're using OpenCV 3
OPENCV_VERSION :=3

# To customize your choice of compiler, uncomment and set the following.
# N.B. the default for Linux is g++ and the default for OSX is clang++
# CUSTOM_CXX :=g++

# CUDA directory contains bin/ and lib/ directories that we need.
CUDA_DIR :=/usr/local/cuda_env/cuda-8.0
# On Ubuntu 14.04, if cuda tools are installed via
# "sudo apt-get install nvidia-cuda-toolkit" then use this instead:
# CUDA_DIR :=/usr

# CUDA architecture setting: going with all of them.
# For CUDA < 6.0, comment the *_50 through *_61 lines for compatibility.
# For CUDA < 8.0, comment the *_60 and *_61 lines for compatibility.
# For CUDA >=9.0, comment the *_20 and *_21 lines for compatibility.
CUDA_ARCH :=-gencode arch=compute_20,code=sm_20 \
 -gencode arch=compute_20,code=sm_21 \
 -gencode arch=compute_30,code=sm_30 \
 -gencode arch=compute_35,code=sm_35 \
 -gencode arch=compute_50,code=sm_50 \
 -gencode arch=compute_52,code=sm_52 \
 -gencode arch=compute_60,code=sm_60 \
 -gencode arch=compute_61,code=sm_61 \
 -gencode arch=compute_61,code=compute_61

# BLAS choice:
# atlas for ATLAS (default)
# mkl for MKL
# open for OpenBlas
BLAS :=atlas
# Custom (MKL/ATLAS/OpenBLAS) include and lib directories.
# Leave commented to accept the defaults for your choice of BLAS
# (which should work)!
# BLAS_INCLUDE :=/path/to/your/blas
# BLAS_LIB :=/path/to/your/blas

# Homebrew puts openblas in a directory that is not on the standard search path
# BLAS_INCLUDE :=$(shell brew --prefix openblas)/include
# BLAS_LIB :=$(shell brew --prefix openblas)/lib

# This is required only if you will compile the matlab interface.
# MATLAB directory should contain the mex binary in /bin.
# MATLAB_DIR :=/usr/local
# MATLAB_DIR :=/Applications/MATLAB_R2012b.app

# NOTE: this is required only if you will compile the python interface.
# We need to be able to find Python.h and numpy/arrayobject.h.
#PYTHON_INCLUDE :=/usr/include/python2.7 \
# /usr/lib/python2.7/dist-packages/numpy/core/include
# Anaconda Python distribution is quite popular. Include path:
# Verify anaconda location, sometimes it's in root.
ANACONDA_HOME :=$(HOME)/anaconda3/envs/caffe
PYTHON_INCLUDE :=$(ANACONDA_HOME)/include \
 $(ANACONDA_HOME)/include/python3.6m\
 $(ANACONDA_HOME)/lib/python3.6/site-packages/numpy/core/include

# Uncomment to use Python 3 (default is Python 2)
# PYTHON_LIBRARIES :=boost_python3 python3.5m
# PYTHON_INCLUDE :=/usr/include/python3.5m \
# /usr/lib/python3.5/dist-packages/numpy/core/include

# We need to be able to find libpythonX.X.so or .dylib.
# PYTHON_LIB :=/usr/lib
PYTHON_LIB :=$(ANACONDA_HOME)/lib

# Homebrew installs numpy in a non standard path (keg only)
# PYTHON_INCLUDE +=$(dir $(shell python -c 'import numpy.core; print(numpy.core.__file__)'))/include
# PYTHON_LIB +=$(shell brew --prefix numpy)/lib

# Uncomment to support layers written in Python (will link against Python libs)
# WITH_PYTHON_LAYER :=1

# Whatever else you find you need goes here.
INCLUDE_DIRS :=$(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
LIBRARY_DIRS :=$(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/hdf5/serial/

# If Homebrew is installed at a non standard location (for example your home directory) and you use it for general dependencies
# INCLUDE_DIRS +=$(shell brew --prefix)/include
# LIBRARY_DIRS +=$(shell brew --prefix)/lib

# NCCL acceleration switch (uncomment to build with NCCL)
# https://github.com/NVIDIA/nccl (last tested version: v1.2.3-1+cuda8.0)
# USE_NCCL :=1

# Uncomment to use `pkg-config` to specify OpenCV library paths.
# (Usually not necessary -- OpenCV libraries are normally installed in one of the above $LIBRARY_DIRS.)
# USE_PKG_CONFIG :=1

# N.B. both build and distribute dirs are cleared on `make clean`
BUILD_DIR :=build
DISTRIBUTE_DIR :=distribute

# Uncomment for debugging. Does not work on OSX due to https://github.com/BVLC/caffe/issues/171
# DEBUG :=1

# The ID of the GPU that 'make runtest' will use to run unit tests.
TEST_GPUID :=0

# enable pretty build (comment to see full commands)
Q ?=@

4、更改makefile,更改这一行

LIBRARIES +=opencv_core opencv_highgui opencv_imgproc opencv_imgcodecs

5、编译caffe

cd caffe
make all -j8
make pycaffe

6、更改.bashrc路径

export PYTHONPATH="/home/usrname/caffe/python:$PYTHONPATH"

7、完整安装caffe路径(这个私人设置,不做参考)

# add for use caffe copy from jhyang
export LD_LIBRARY_PATH="/usr/local/cuda_env/cuda-8.0/lib64:/usr/local/cuda_env/cudnn-v5.1-for-cuda8.0/lib64:/usr/local/cuda_env/cudnn-v6.0-for-cuda8.0/lib64:/usr/local/cuda_env/cuda-9.0/lib64:/usr/local/cuda_env/cudnn-v7.0-for-cuda9.0/lib64"
export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/bin:/bin:/usr/sbin:/sbin"
export LIBRARY_PATH="/usr/local/cuda_env/cuda-8.0/lib64:/usr/local/cuda_env/cudnn-v5.1-for-cuda8.0/lib64:/usr/local/cuda_env/cudnn-v6.0-for-cuda8.0/lib64:/usr/local/cuda_env/cuda-9.0/lib64:/usr/local/cuda_env/cudnn-v7.0-for-cuda9.0/lib64"
export PYTHONPATH="/home/usr/caffe/python:$PYTHONPATH"
export CPATH=$CPATH:/usr/local/cuda_env/cudnn-v6.0-for-cuda8.0/include:/usr/include/hdf5/serial/hdf5.h
export CPATH=/usr/local/cuda_env/cudnn-v5.1-for-cuda8.0/include:/usr/local/cuda_env/cudnn-v6.0-for-cuda8.0/include:/usr/local/cuda_env/cudnn-v7.0-for-cuda9.0/include

8、测试使用

么是JavaScript

JavaScript是一种基于对象和事件驱动的、并具有安全性能的脚本语言,已经被广泛用于Web应用开发,常用来为网页添加各式各样的动态功能,为用户提供更流畅美观的浏览效果。通常JavaScript脚本是通过嵌入在HTML中来实现自身的功能的。

JavaScript特点

是一种解释性脚本语言(代码不进行预编译)。

主要用来向HTML(标准通用标记语言下的一个应用)页面添加交互行为。

可以直接嵌入HTML页面,但写成单独的js文件有利于结构和行为的分离

跨平台特性,在绝大多数浏览器的支持下,可以在多种平台下运行(如Windows、Linux、Mac、Android、iOS等)。

JavaScript组成


JavaScript日常用途

1、嵌入动态文本于HTML页面。

2、对浏览器事件做出响应。

3、读写HTML元素

4、在数据被提交到服务器之前验证数据。

5、检测访客的浏览器信息。

6、控制cookies,包括创建和修改等。

7、基于Node.js技术进行服务器端编程。

JavaScript的基本结构

<script type="text/javascript">
 <!—
 JavaScript 语句;
 —>
</script >


示例:

……
<title>初学JavaScript</title>
</head>
<body>
<script type="text/javascript">
 document.write("初学JavaScript");
 document.write("<h1>Hello,JavaScript</h1>");
</script>
</body>
</html>


<script>…</script>可以包含在文档中的任何地方,只要保证这些代码在被使用前已读取并加载到内存即可

JavaScript的执行原理


网页中引用JavaScript的方式

1、使用<script>标签

2、外部JS文件

<script src="export.js" type="text/javascript"></script>


3.直接在HTML标签中

<input name="btn" type="button" value="弹出消息框" 
 onclick="javascript:alert('欢迎你');"/>


JavaScript核心语法:


1. 变量

①先声明变量再赋值

var width;
width=5;
var - 用于声明变量的关键字
width - 变量名


②同时声明和赋值变量

var catName="皮皮";
var x, y, z=10;


③不声明直接赋值【一般不使用】

width=5;


变量可以不经声明而直接使用,但这种方法很容易出错,也很难查找排错,不推荐使用。

2. 数据类型

①undefined:示例:var width;

变量width没有初始值,将被赋予值undefined

②null:表示一个空值,与undefined值相等

③number:

var iNum=23; //整数

var iNum=23.0; //浮点数

④Boolean:true和false 但是JS会把他们解析成1;0

⑤String:一组被引号(单引号或双引号)括起来的文本 var string1="This is a string";

3. typeof运算符

typeof检测变量的返回值;typeof运算符返回值如下:

①undefined:变量被声明后,但未被赋值.

②string:用单引号或双引号来声明的字符串。

③boolean:true或false。

④number:整数或浮点数。

⑤object:javascript中的对象、数组和null。